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

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

Mary-Kate Olsen
リリース: 2024-12-07 21:15:14
オリジナル
805 人が閲覧しました

Can `.apply()` be Used with the `new` Operator to Create JavaScript Objects?

「新しい」演算子による .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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート