2016-06-21 6 views
1

我々は関数を使用して関数を作成すると、これまでnew function(){ ... }JavaScriptの新機能発現と新しいFunctionコンストラクタ

new Function();以上の私の理解/仮定

  • を使用してから結果のオブジェクトに関してれる私の質問()
  • new演算子の有無にかかわらず、Function()コンストラクタは新しい関数objを返します(関数スロットの内部スロットは関数型オブジェクトを表します)関数式を使用して電気ショック療法は
  • 内部で私の仮定に従い
  • 関数式は、関数本体

私の質問

を解析して最適化を提供機能()コンストラクタを使用して関数オブジェクトを返します。上記の理由でnew Function();new function(){ ... }が別のものを返すのはなぜですか?

最初は関数オブジェクトを返しますが、後者は標準オブジェクトを返します。フードの下の関数式がFunction()コンストラクタを使用すると、後者はなぜnew Function();と同じように振る舞いませんか?

new function(){ ...}を使用すると、標準オブジェクトではなく、関数オブジェクトが必要になります。新しい関数(){...}新しいオブジェクトを返しながら

+2

'関数(){} ==新しい関数()' '新しい関数(){} ==新しい新しい関数()' 。 – zzzzBov

答えて

2

次の行は、本質的に同じである。

function foo(...) {...} 
var foo = function (...) {...}; 
var foo = new Function (...); 

これら全てが新しい関数宣言(オブジェクトである、つまり...、Objectプロトタイプを継承する、Functionのインスタンスである)で現在のスコープはfoo変数でアクセスできます。

newキーワードは、標準のOOP言語でクラスインスタンスに似たものを作成できる関数からオブジェクトをインスタンス化します。上記の例を続けると

var bar = new foo(...) 

bar変数を介してアクセスすることができ、現在のスコープ内foo関数のインスタンスをインスタンス化するであろう。

なぜnew Function();new function(){ ... }が別のものを返しますか?


私は、少し例を言い換えるするつもりです。代わりに:

new Function() 
//and 
new function(){ ... } 

私は

new Function() 
//and 
var foo = function() { ... }; 
new foo(); 

new Function()Functionfoo異なる機能があるので、new foo()とは異なる事が完全であることを返す理由を使用するつもりです。

new Object()は、new Array()とは異なる機能を持つ別のオブジェクトを返すという混乱を避けることができます。まったく同じことがここで起こっています。

ボンネットの下に関数式がFunction()コンストラクタを使用していることを考えると、なぜ後者はnew Function();と同じように動作しないのですか?

フード下後表現は、本質的に:

new (new Function (...)) 
+0

偉大な答えは、ありがとう。 – Brummy

1

新しい関数(...)は、新しい機能を返します。

基本的に、関数は単なるコードの評価方法です。

オブジェクトは、データをjavascriptに格納する方法です。

サイドノート:あなたは、技術的に

new (new Function(...)) 

ウィッヒは、新しいオブジェクトを返し行うことができます。

関連する問題