对原型链和Javascript原型的误解

以前,我对Javascript原型链中的原型继承和标识符查找有点困惑。

例如,下面的代码:

复制代码代码如下所示:

函数(富){ };

新富();

foo.prototype.label =laruence ;

Alert (foo.label); //output: laruence

警报(标签);输出:未定义



今天我们看到下面的图表:



Javascript对象布局

此外,参见Javascript对象层次结构:

该原型仅用于由创建的对象/实例/对象实例继承的属性,它也被称为是非。

换句话说,函数对象的原型在原型链查找过程中不起作用。

今天,发现火狐(Firefox下因为暴露{ { } }通过原型__proto__),该标识符查找真正的参与是函数对象的__proto__。

复制代码代码如下所示:

函数(富){ };

新富();

foo。__proto__。标签=laruence ;

警报(foo。标签); / /输出:laruence

警报(标签);输出:未定义



显然:

复制代码代码如下所示:

函数(富){ };

警报(foo。__proto__ = = = foo。原型); / /输出:假



此外,还解释了,

复制代码代码如下所示:

警报(对象。foreach); / /未定义



function.prototype.foreach =函数(对象、块、上下文){

对于(对象中的var键){

如果(typeof这个原型{key} = = undefined){

block.call(语境、对象{key},关键,对象);

}

}



};



警报(对象。foreach);

警报(功能。foreach);

警报(object.foreach =功能。foreach); / /真的