以前は、JavaScriptのプロトタイプチェーンでのプロトタイプの継承と識別子検索について少し混乱していました。
たとえば、次のコード:
コードコピーは次のとおりです。
function foo(){};
var foo = new foo();
foo.prototype.label = "laruence";
アラート(foo.label); //出力:larence
alert(foo.label); // output:未定義
今日、私は次の写真を見ました:
JavaScriptオブジェクトレイアウト
また、JavaScriptオブジェクト階層を参照してください。
プロトタイプは、その関数によって作成されたオブジェクト/インスタンスによって継承されるプロパティにのみ使用されます。関数自体は、関連するプロトタイプを使用しません。
言い換えれば、関数オブジェクトのプロトタイプは、プロトタイプチェーンの検索プロセスでは機能しません。
今日、私はFirefox(Firefoxが__Proto__を介して露出したため)の下で発見されたため、識別子検索に本当に参加しているのは、関数オブジェクトの__Proto__です。
コードコピーは次のとおりです。
function foo(){};
var foo = new foo();
foo .__ proto __。ラベル= "laruence";
アラート(foo.label); //出力:larence
alert(foo.label); // output:未定義
そして、明らかに:
コードコピーは次のとおりです。
function foo(){};
アラート(foo .__ proto__ === foo.prototype); //出力:false
さらに、それも説明しました、
コードコピーは次のとおりです。
アラート(object.foreach); // 未定義
function.prototype.foreach = function(object、block、context){
for(オブジェクトのvarキー){
if(typeof this.prototype [key] == "未定義"){
block.call(context、object [key]、key、object);
}
}
};
アラート(object.foreach);
アラート(function.foreach);
alert(object.foreach === function.foreach); // 真実