ホームページ  >  記事  >  ウェブフロントエンド  >  「new」演算子は JavaScript でどのように機能し、プロトタイプ チェーンを持つオブジェクトをどのように作成するのでしょうか?

「new」演算子は JavaScript でどのように機能し、プロトタイプ チェーンを持つオブジェクトをどのように作成するのでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 21:28:30194ブラウズ

How does the `new` operator work in JavaScript, and how does it create objects with their prototype chains?

JavaScript では新しい演算子はどのように機能しますか?

新しい演算子は、JavaScript のオブジェクト指向プログラミング システムで重要な役割を果たします。オブジェクトを効果的に作成および管理するには、その機能を理解することが不可欠です。

新しい Operator の実装の詳細

<code class="javascript">new dataObj(args);</code>

このコード スニペットは内部 [[一連の特定のアクションを実行するための]] メソッドを構築します:

  1. オブジェクトの作成: 新しいネイティブ オブジェクトを初期化します。
  2. プロトタイプ チェーンの確立: このオブジェクトの内部 [[Prototype]] は、Function プロトタイプ プロパティを指すように設定されています。特に、関数プロトタイプ プロパティがオブジェクトではない場合 (数値、文字列、ブール値、未定義、または Null などのプリミティブ値)、代わりに Object.prototype がプロトタイプとして使用されます。
  3. 関数呼び出し: オブジェクトの作成後、新しく作成されたオブジェクトが this 値として割り当てられて関数が呼び出されます。
  4. 戻り値の処理: 呼び出された関数の戻り値がプリミティブを生成する場合、内部的に作成されたオブジェクトが返されます。ただし、オブジェクトが返された場合、内部で作成されたオブジェクトは破棄されます。

明確にするための代替実装

理解を高めるために、次の代替表現を示します。新しい演算子が達成すること:

<code class="javascript">function NEW(f) {
  var obj, ret, proto;

  // Check if `f.prototype` is an object, not a primitive
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Create an object that inherits from `proto`
  obj = Object.create(proto);

  // Apply the function setting `obj` as the `this` value
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  if (Object(ret) === ret) { // the result is an object?
    return ret;
  }
  return obj;
}

// Example usage:
function Foo (arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');
obj.prop; // 'bar'
obj.inherited; // 'baz'
obj instanceof Foo // true</code>

この例では:

  • NEW は新しい演算子の動作をシミュレートするカスタム関数です。
  • それはチェックしますFunction プロトタイプ プロパティがオブジェクトの場合、そうでない場合は Object.prototype を使用して新しいオブジェクトを作成します。
  • NEW は、関数を this 値として新しく作成されたオブジェクトに適用します。
  • 関数の戻り値が決定します。返される最終オブジェクト。

以上が「new」演算子は JavaScript でどのように機能し、プロトタイプ チェーンを持つオブジェクトをどのように作成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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