Javascript原型链和原型的一个误区
之前我对Javascript的原型链中,原型继承与标识符查找有些迷惑,
如,如下的代码:
functionFoo(){};
varfoo=newFoo();
Foo.prototype.label="laruence";
alert(foo.label);//output:laruence
alert(Foo.label);//output:undefined
今天看到了如下这个图:
Javascriptobjectlayout
另外,在JavascriptObjectHierarchy看到:
Theprototypeisonlyusedforpropertiesinheritedbyobjects/instancescreatedbythatfunction.Thefunctionitselfdoesnotusetheassociatedprototype.
也就是说,函数对象的prototype并不作用于原型链查找过程中,
今天在firefox下发现(因为firefox通过__proto__暴露了[[prototype]]),真正参与标识符查找的是函数对象的__proto__,
functionFoo(){};
varfoo=newFoo();
Foo.__proto__.label="laruence";
alert(Foo.label);//output:laruence
alert(foo.label);//output:undefined
而,显然的:
另外,也解释了,
functionFoo(){};
alert(Foo.__proto__===Foo.prototype);//output:false
alert(Object.forEach);//undefined
Function.prototype.forEach=function(object,block,context){
for(varkeyinobject){
if(typeofthis.prototype[key]=="undefined"){
block.call(context,object[key],key,object);
}
}
};
alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach===Function.forEach);//true
相关文章