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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 21:43:15659ブラウズ

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

新しい演算子を使用した .apply() メソッドの呼び出し: 実行可能ですか?

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 サイトの他の関連記事を参照してください。

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