JavaScript の「new」演算子はどのように魔法を発揮するのでしょうか?

Mary-Kate Olsen
リリース: 2024-10-28 12:56:01
オリジナル
482 人が閲覧しました

How Does the JavaScript

JavaScript の「new」演算子の謎を解明する

JavaScript の複雑さの奥には、当惑させる可能性があることで最もよく知られている神秘的な構成要素、「new」が横たわっています。オペレーター。その曖昧な仕組みはプロトタイプチェーンと並んでおり、多くの人がコードの迷路で迷っています。

新しいオペレーターのメカニズムを掘り下げる

「新しい」の秘密を明らかにすること" 演算子、その複雑な操作を詳しく見てみましょう:

  • これは、JavaScript 内の目に見えない力である内部 [[Construct]] メソッドをラングリングします。
  • [[Construct]] は、手付かずのオブジェクトを細心の注意を払って作成します。
  • オブジェクトの [[Prototype]] が Function プロトタイプに結び付けられる微妙なダンスが続きます。関数にオブジェクト プロトタイプがない (プリミティブ値に格下げする) 場合を除き、Object.prototype が親切に介入してオブジェクトをガイドします。
  • 次に、「new」演算子が関数の壮大な呼び出しを調整し、関数に
  • 重要な分岐点が発生します。関数がプリミティブ値を生成する場合、内部的に生成されたオブジェクトが中心になります。しかし、物体を返却すると、残念ながら元の物体は忘却の彼方に消えてしまいます。

代替レンズ

謎に満ちた「新しい」をさらに解明するためにオペレーターの場合、そのアクションを反映する代替実装を検討してみましょう:

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

  // Prototype verification
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Object inheritance from `proto`
  obj = Object.create(proto);

  // Function invocation with object as "this"
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  // Object return
  if (Object(ret) === ret) {
    return ret;
  }
  return obj;
}

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

var obj = NEW(Foo, 'bar');
console.log(obj.prop); // 'bar'
console.log(obj.inherited); // 'baz'
console.log(obj instanceof Foo); // true</code>
ログイン後にコピー

このコードはビーコンとして機能し、「新しい」オペレーターが舞台裏でどのように熱心に職務を実行しているかを示します。

以上がJavaScript の「new」演算子はどのように魔法を発揮するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!