Class1
Javascript で名前を付けたクラスを作成しました。
function Class1(){}
これで、演算子をClass1
使用してオブジェクトを作成できます。new
例えば:
var obj1 = new Class1();
また、最近、次のものが使用できることもわかりました。
var obj1 = new Class1;
それらは同じですか、それとも使用に違いはありますか?
Class1
Javascript で名前を付けたクラスを作成しました。
function Class1(){}
これで、演算子をClass1
使用してオブジェクトを作成できます。new
例えば:
var obj1 = new Class1();
また、最近、次のものが使用できることもわかりました。
var obj1 = new Class1;
それらは同じですか、それとも使用に違いはありますか?
ECMAScript 5、つまり Javascript 仕様で指定されているとおり:
11.2.2 新しいオペレーター
生産性
new NewExpression
は次のように評価されます。
- ref を NewExpression の評価結果とします。
- コンストラクターを GetValue(ref) とします。
- Type(constructor) が Object でない場合、TypeError 例外をスローします。
- コンストラクターが [[Construct]] 内部メソッドを実装していない場合、TypeError 例外をスローします。
- コンストラクタで [[Construct]] 内部メソッドを呼び出した結果を返します。引数はありません (つまり、引数の空のリスト)。
生産性
new MemberExpression Arguments
は次のように評価されます。
- MemberExpression を評価した結果を ref とします。
- コンストラクターを GetValue(ref) とします。
- argList を Arguments を評価した結果とし、引数値の内部リストを生成します (11.2.4)。
- Type(constructor) が Object でない場合、TypeError 例外をスローします。
- コンストラクターが [[Construct]] 内部メソッドを実装していない場合、TypeError 例外をスローします。
- リスト argList を引数値として提供して、コンストラクターで [[Construct]] 内部メソッドを呼び出した結果を返します。
そのため、引数の空のリストでnew Foo
呼び出すFoo
のと同じnew Foo()
です。
2 つの構文に違いはありません。
違いはありません。それら()
を追加しないと、インタープリターによって推測されます。これは、広く使用されている最適化のトリックでもあります。
コンストラクターがパラメーターを取らない場合は、次のように簡単に実行できます。
new MyClass1
また、セミコロンの挿入と同様に、括弧が自動的に追加されます。new
ただし、この動作を強制するのはキーワードのみであることに注意してください。
インスタンス化は、括弧をスキップできる唯一のシナリオです。
それは単なる簡略構文です。コンストラクターにパラメーターを渡さない場合は、括弧を省略できます。
var obj1 = new Class1;
とまったく同じです
var obj1 = new Class1();