ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript学習ノート プロトタイプチェーンの7つの原則_基礎知識

Javascript学習ノート プロトタイプチェーンの7つの原則_基礎知識

WBOY
WBOYオリジナル
2016-05-16 18:36:44706ブラウズ

まずこのコード部分を見てみましょう:

コードをコピー コードは次のとおりです:

>
非常に単純なコードです。この新しい機能が正確に何をするのか見てみましょう。新しいプロセスは次の 3 つのステップに分割できます:
var p={}; つまり、オブジェクト p を初期化します。

<2> p.__proto__=person.prototype;

<3> つまり、p の構築は p の初期化とも言えます。

鍵は 2 番目のステップにあります。それを証明しましょう:



コードをコピーします コードは次のとおりです。 :


このコードは true を返します。ステップ 2 が正しいことを説明します。

それで、__proto__ とは何ですか?ここで簡単にお話しましょう。各オブジェクトはその内部の属性 (__proto__) を初期化します。オブジェクトの属性にアクセスするとき、この属性がオブジェクト内に存在しない場合、オブジェクトは __proto__ にアクセスして属性を見つけます。この __proto__ は独自の属性を持ちます。 __proto__ なので、それを探し続けます。これが、通常、プロトタイプ チェーンの概念と呼ばれるものです。

標準によれば、__proto__ は公開されていません。つまり、プライベート プロパティですが、Firefox エンジンはそれを公開し、外部からアクセスして設定できる共通プロパティにします。

さて、概念は明確です。次のコードを見てみましょう:




コードをコピーします
コードは次のとおりです:
この段落 コードは非常に単純です。誰もがこのように書いたと思います。それでは、なぜ p が person's Say にアクセスできるのかを見てみましょう。

最初の var p=new Person(); で p.__proto__=person.prototype を取得できます。次に、p.Say() を呼び出すと、まず p には Say 属性が存在しないため、__proto__ でそれを見つける必要があります。これは Person.prototype であり、上で Person.prototype( を定義しました)。 ){}; そこで、この方法を見つけました。

さて、次に、より複雑なことを見てみましょう。



コードをコピー


コードは次のとおりです:



この導出を実行しましょう:

var p=new Programmer() は p.__proto__=Programmer を取得できます。 .prototype;

上記で Programmer.prototype=new Person(); と指定しました。 var p1=new Person();Programmer.prototype=p1; とします。 p1.__proto__=Person.prototype;

Programmer.prototype.__proto__=Person.prototype;
上記によれば、p.__proto__=Programmer.prototype が得られます。 p.__proto__.__proto__=person.prototype を取得できます。

わかりました。明確に計算した後、上記の結果、p.Say() を見てみましょう。 p には Say 属性がないため、p1 である Programmer.prototype である p.__proto__ に移動します。そこで私はalert("人が言う")メソッドを見つけました。

残りは同じです。

これがプロトタイプチェーンの実装原理です。

最後に、プロトタイプは実際には単なる幻想であり、プロトタイプ チェーンを実現する際に補助的な役割を果たすだけです。つまり、プロトタイプ チェーンの本質は新しい場合にのみ存在します。 __proto__ にあります!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。