实例属性是否会掩盖原型链?

时间:2013-07-22 14:34:18

标签: javascript underscore.js

代码段A

var instance = [];

Array.prototype.forEach = function () {var prototyped_version;}

instance.forEach = function () {var property_version};   

在代码片段A中,如果我向实例变量instance添加属性,并意外地在原型方法上写入(在本例中为forEach),那么在执行时将实际调用哪个方法: / p>

instance.forEach()

原型版本还是属性版本?

我试图找出为什么underscore似乎有复杂的类型检查,特别是这一行:

if (nativeForEach && obj.forEach === nativeForEach) {

为什么不呢:

if (obj.forEach) {

已经验证obj不是nullundefined

1 个答案:

答案 0 :(得分:1)

我发现这将覆盖原型版本。即使您在属性赋值后分配了原型版本。

这是fiddle。记录该功能将打印出来,您可以在控制台中检查它并查看它是属性版本。

小提琴代码:

var instance = [];

instance.forEach = function () {var property_version};

Array.prototype.forEach = function () {var prototyped_version;}

console.log(instance.forEach);

实例属性将覆盖原型方法。