1

Class1Javascript で名前を付けたクラスを作成しました。

function Class1(){}

これで、演算子をClass1使用してオブジェクトを作成できます。new例えば:

var obj1 = new Class1();

また、最近、次のものが使用できることもわかりました。

var obj1 = new Class1;

それらは同じですか、それとも使用に違いはありますか?

4

3 に答える 3

4

ECMAScript 5、つまり Javascript 仕様で指定されているとおり:

11.2.2 新しいオペレーター

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

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

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

  1. MemberExpression を評価した結果を ref とします。
  2. コンストラクターを GetValue(ref) とします。
  3. argList を Arguments を評価した結果とし、引数値の内部リストを生成します (11.2.4)。
  4. Type(constructor) が Object でない場合、TypeError 例外をスローします。
  5. コンストラクターが [[Construct]] 内部メソッドを実装していない場合、TypeError 例外をスローします。
  6. リスト argList を引数値として提供して、コンストラクターで [[Construct]] 内部メソッドを呼び出した結果を返します。

そのため、引数の空のリストでnew Foo呼び出すFooのと同じnew Foo()です。

2 つの構文に違いはありません。

于 2013-05-23T13:22:19.817 に答える
3

違いはありません。それら()を追加しないと、インタープリターによって推測されます。これは、広く使用されている最適化のトリックでもあります。

コンストラクターがパラメーターを取らない場合は、次のように簡単に実行できます。

new MyClass1 

また、セミコロンの挿入と同様に、括弧が自動的に追加されます。newただし、この動作を強制するのはキーワードのみであることに注意してください。

インスタンス化は、括弧をスキップできる唯一のシナリオです。

于 2013-05-23T13:19:29.757 に答える
3

それは単なる簡略構文です。コンストラクターにパラメーターを渡さない場合は、括弧を省略できます。

var obj1 = new Class1;

とまったく同じです

var obj1 = new Class1();
于 2013-05-23T13:20:03.790 に答える