ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の `.apply()` で `new` 演算子を使用して、変数引数を持つオブジェクトを作成できますか?
JavaScript では、new 演算子を使用してオブジェクト インスタンスを作成することが望ましい場合があります。可変数の引数をコンストラクターに渡しながら。ただし、提供されたコード スニペットを使用してこれを実現することはできません。
1. Matthew Crumley のアプローチ:
この解決策には、Something プロトタイプを拡張し、apply() メソッドのラッパーを提供する新しい関数 F の作成が含まれます。次のように実装できます:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
2. ECMAScript 5 の解決策:
ECMAScript 5 では、より簡潔な解決策として Function.prototype.bind メソッドを使用できます:
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
この関数は次のように利用できます。
var s = newCall(Something, a, b, c);
あるいは直接:
var s = new (Function.prototype.bind.call(Something, null, a, b, c));
説明:
bind メソッドを使用すると、元の関数と同じコンテキスト (この値) を持つ新しい関数を作成できますが、引数の数が限られている。 apply() メソッドを使用すると、バインドされた関数に可変数の引数を渡すことができます。最後に、new 演算子をバインドされた関数に適用して、新しいオブジェクト インスタンスを作成できます。
以上がJavaScript の `.apply()` で `new` 演算子を使用して、変数引数を持つオブジェクトを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。