zl程序教程

您现在的位置是:首页 >  前端

当前栏目

Javascript原型链和原型的一个误区

JavaScript 一个 原型 误区
2023-06-13 09:15:29 时间

之前我对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