1

newオペレーターの使い方を学ぶだけでなく、オペレーターがどのように機能するかを知りたい.ECMAScript 5標準を調べたところ、アルゴリズムがどのように機能するかを説明していることがわかりましたが、その意味について少し混乱しています.

生産性NewExpression : new NewExpressionは次のように評価されます。

  1. NewExpressionrefを評価した結果とします。
  2. GetValue constructor(ref) とします。
  3. でない場合Type(constructor)Object、例外をスローしTypeErrorます。
  4. constructor内部メソッドを実装していない場合は[[Construct]]、例外をスローしTypeErrorます。
  5. [[Construct]]引数を指定せずに on の内部メソッドを呼び出した結果を返しconstructorます (つまり、引数の空のリスト)。

この例を使用して、上記のアルゴリズムを理解しようとします。

var f = function() {};    
var h = new f();

特に最初のステップがよくわからないので、他のステップをたどることができません。

  1. NewExpressionrefを評価した結果とします。
var h = new f();
        ~~~ ~~~~
         |    \_________ NewExpression 
     new operator

refの値ということf()ですか?しかし、それはundefinedです。

3. でない場合Type(constructor)Object、例外をスローしTypeErrorます。

しかし、関数の型は、例外fをスローしますか?TypeError

5. [[Construct]]引数を指定せずに on の内部メソッドを呼び出した結果を返しconstructorます (つまり、引数の空のリスト)。

[[Construct]]関数の内部プロパティ、それを呼び出す意味は何constructorですか?

4

2 に答える 2

2

これを段階的に見ていきましょう

  1. 次のようなものを解決しますnew window['foo' + 1 + 'bar']->new window.foo1bar
  2. 実際に参照されているオブジェクトを特定する: とはwindow? グローバルオブジェクトのローカル変数またはプロパティ?
  3. これは明らかです。
  4. それほど明白ではありませんが、ポイントは次のとおりです。すべてFunctionがコンストラクターですが、すべてのコンストラクターがFunction. newこの点により、がコンストラクターでのみ呼び出されることが保証されます。
  5. コンストラクターを実行します。仕様MemberExpression : new MemberExpression Argumentsではケースも提供されていることに注意してくださいnew foo(...)
于 2013-06-29T12:24:22.150 に答える