对原型链和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); / /真的