ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で `.apply()` を `new` 演算子とともに使用して、変数引数を持つオブジェクトを作成できますか?

JavaScript で `.apply()` を `new` 演算子とともに使用して、変数引数を持つオブジェクトを作成できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-11 14:15:11684ブラウズ

Can You Use `.apply()` with the `new` Operator in JavaScript to Create Objects with Variable Arguments?

変数引数を持つ新しいオブジェクト: .apply() と 'new' 演算子の分かりやすく解説

JavaScript では、'new' 演算子を使用してオブジェクト インスタンスを構築するのが一般的です。これは、引数をコンストラクターに直接渡すことによって行われます。ただし、引数を動的に提供したいシナリオもあります。この記事では、これを達成するために 'new' 演算子とともに '.apply()' を使用することが可能かどうかという問題について取り上げます。

'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

ECMAScript 5 の 'Function.prototype.bind' は、よりクリーンなソリューションを提供します。 :

function newCall(Cls) {
    return new (Function.prototype.bind.apply(Cls, arguments));
}

このメソッドは「new」演算子とシームレスに統合され、

Eval メソッド (注意)

潜在的なセキュリティ上の懸念があるため推奨されませんが、'eval' メソッドは別のメソッドを提供します。回避策:

var s = eval("new Something(" + [a, b, c] + ")");

ソリューションを理解する

これらのソリューションは、bind() メソッドを利用します。必要な引数を受け入れる関数を作成します。次に、'new' 演算子を使用して、その関数からオブジェクトをインスタンス化します。

結論

'.apply()' と 'new' 演算子を使用して可変引数を持つオブジェクトを作成するには、いくつかの操作が必要です。創意工夫。利用可能な JavaScript 機能を活用することで、開発者はこれらのテクニックを実装して、目的の機能を実現できます。

以上がJavaScript で `.apply()` を `new` 演算子とともに使用して、変数引数を持つオブジェクトを作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。