JavaScript では、'new' 演算子を使用してオブジェクト インスタンスを構築するのが一般的です。これは、引数をコンストラクターに直接渡すことによって行われます。ただし、引数を動的に提供したいシナリオもあります。この記事では、これを達成するために 'new' 演算子とともに '.apply()' を使用することが可能かどうかという問題について取り上げます。
汎用性を高めるため、「.apply()」メソッドを「new」演算子と一緒に直接使用することはできません。これを試みると、予期しない動作やエラーが発生します。
そのような機能の必要性を認識し、JavaScript コミュニティによってさまざまな革新的なソリューションが提案されています。
Matthew Crumley によるアプローチの 1 つは、関数プロトタイプを利用して、回避策:
var createSomething = (function() { function F(args) { return Something.apply(this, args); } F.prototype = Something.prototype; return function() { return new F(arguments); } })();
このソリューションは、目的の動作を持つ新しい関数を効果的に作成します。
ECMAScript 5 の 'Function.prototype.bind' は、よりクリーンなソリューションを提供します。 :
function newCall(Cls) { return new (Function.prototype.bind.apply(Cls, arguments)); }
このメソッドは「new」演算子とシームレスに統合され、
潜在的なセキュリティ上の懸念があるため推奨されませんが、'eval' メソッドは別のメソッドを提供します。回避策:
var s = eval("new Something(" + [a, b, c] + ")");
これらのソリューションは、bind() メソッドを利用します。必要な引数を受け入れる関数を作成します。次に、'new' 演算子を使用して、その関数からオブジェクトをインスタンス化します。
'.apply()' と 'new' 演算子を使用して可変引数を持つオブジェクトを作成するには、いくつかの操作が必要です。創意工夫。利用可能な JavaScript 機能を活用することで、開発者はこれらのテクニックを実装して、目的の機能を実現できます。
以上がJavaScript で `.apply()` を `new` 演算子とともに使用して、変数引数を持つオブジェクトを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。