「新しい」演算子による .apply() の機能の拡張
JavaScript では、.apply() メソッドで関数を使用できます指定されたオブジェクト コンテキストと配列として渡される引数を使用して呼び出されます。ただし、疑問が生じます: .apply() を 'new' 演算子と組み合わせて使用してオブジェクト インスタンスを作成できますか?
あなたが提供した最初のコード スニペットはこれを実行しようとしましたが、残念ながら、このアプローチは次のとおりです。
ただし、この制限を克服するために提案されている賢い解決策がいくつかあります。特にエレガントなアプローチの 1 つは、ECMAScript5 で Function.prototype.bind を使用することです。
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
この関数は、クラスまたはコンストラクターを最初の引数として受け入れ、コンストラクターに渡す必要がある追加の引数も受け入れます。次に、Function.prototype.bind を使用して、コンストラクターと同じコンテキストと事前にバインドされた追加の引数を持つ新しい関数を作成します。最後に、「new」キーワードを使用して、このバインドされた関数に基づいて新しいオブジェクト インスタンスを作成します。
もう 1 つの可能な解決策には、eval() 関数の使用が含まれます。
function evalConstructor(str, args) { return eval('new (' + str + ')(' + args + ')'); }
この関数はコンストラクターと引数の配列を表す文字列式を返し、その文字列を JavaScript 式として評価します。結果として得られるコードは基本的に new 演算子を直接使用した場合と同じですが、可変数の引数を渡すことができます。
これらのソリューションは、可変数の引数を持つオブジェクト インスタンスを作成する便利な方法を提供し、機能を強化します。 JavaScript のコンストラクター メカニズムの機能。
以上が`.apply()` を `new` 演算子とともに使用して JavaScript オブジェクトを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。