JavaScript の「new」演算子はどのようにオブジェクトを作成し、その継承を確立しますか?

Linda Hamilton
リリース: 2024-10-27 01:46:30
オリジナル
614 人が閲覧しました

How Does the `new` Operator in JavaScript Create Objects and Establish Their Inheritance?

JavaScript の新しい Operator の内部動作を解明する

プロトタイプ チェーンに似た JavaScript の誤解された領域が、基本的なクエリを明らかにします: 「new」演算子は、オブジェクトの作成をどのように調整し、その系統とコア属性を定義しますか?

new の本質

この謎を解明するには、別の図を検討してください。 :

function NEW(f) {
  var obj, ret, proto;

  // Examine `f.prototype`
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

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

  // Invoke `f` with `obj` as `this`
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  // Determine return type
  if (Object(ret) === ret) { // Object returned?
    return ret;
  }

  // Otherwise, return inherited object
  return obj;
}
ログイン後にコピー

メカニズムを理解する

新しい演算子は、次のような内部 [[Construct]] メカニズムに依存します。

  1. ネイティブ オブジェクトを作成します。
  2. その [[Prototype]] を関数のプロトタイプまたは Object.prototype (プロトタイプがプリミティブの場合) に設定します。
  3. オブジェクトを「this.prototype」として関数を呼び出します。 "
  4. 関数がプリミティブを返す場合は内部で作成されたオブジェクトを返し、オブジェクトを返す場合は関数によって返されるオブジェクトを返します。

実用的なアプリケーション

この概念の威力を説明します:

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

var obj = NEW(Foo, 'bar');
ログイン後にコピー

これは、「inherited」継承プロパティと、値「bar」を持つ「prop」プロパティを持つ、Foo から継承するオブジェクトを作成します。

以上がJavaScript の「new」演算子はどのようにオブジェクトを作成し、その継承を確立しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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