ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript プロトタイプ チェーン学習の概要_JavaScript スキル

JavaScript プロトタイプ チェーン学習の概要_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:17:30871ブラウズ
Function と Object はどちらも関数のインスタンスです。

Function の親プロトタイプは Function のプロトタイプを指し、Function のプロトタイプの親プロトタイプは Object のプロトタイプです。
Object の親プロトタイプは Function のプロトタイプも指します。
デフォルトの親プロトタイプがコンストラクターの明示的プロトタイプであるインスタンス オブジェクト
[各オブジェクトには、その親オブジェクト (構築されたオブジェクト関数) プロトタイプ (ここでは親プロトタイプまたは暗黙的プロトタイプと呼ばれます) を指す暗黙的なプロパティがあります。 。プロトタイプもオブジェクトであるため、プロトタイプには親プロトタイプもあります。オブジェクトのプロトタイプはすべての親プロトタイプの最上位 (プロトタイプ ルート) であり、いわゆるプロトタイプ チェーンを形成します。]

オブジェクト属性アクセス。原則

オブジェクトから属性を読み取るとき、そのような属性がオブジェクト自体の属性リストに存在しない場合、関連付けられた親プロトタイプ オブジェクト内でその属性が検索されます。リストにそのような属性がない場合、この親プロトタイプの親プロトタイプは、それが見つかるまで、または最上位プロトタイプ [Object.prototype] オブジェクト属性リストの検索が完了するまで検索されます。
を呼び出すメソッドメソッドの関数オブジェクトはオブジェクトの属性値であるため、オブジェクトは属性にアクセスするための検索プロセスと同じです。
例:
コードをコピーします コードは次のとおりです:

Object.prototype。 m1 = function (){
alert("私はライオンです");
function Class1(str){
this.p1 = str;
}
function Class2 (){}
Class2.prototype.m1 = function(){
alert("Hello");
}
var n1 ("Feathered Lion"); /@__proto_ _Attribute は親プロトタイプへの参照です
//@Object.prototype.__proto__=null
/*
n1 のプロトタイプ チェーン
n1.__proto__=Class1.prototype
Class1。プロトタイプ .__proto__=Object.prototype

*/
var n2 = new Class2()
/*
n2 のプロトタイプ チェーン
n2.__proto__=Class2.prototype
Class2.prototype.__proto__=Object.prototype
*/
n1.m1();//===Object.prototype.m1();
n2.m1();//=== Class2.prototype.m1();
alert(n1.p1);//毛むくじゃらのライオン
alert(n2.p1);//未定義


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