代码段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
不是null
或undefined
。
答案 0 :(得分:1)
我发现这将覆盖原型版本。即使您在属性赋值后分配了原型版本。
这是fiddle。记录该功能将打印出来,您可以在控制台中检查它并查看它是属性版本。
小提琴代码:
var instance = [];
instance.forEach = function () {var property_version};
Array.prototype.forEach = function () {var prototyped_version;}
console.log(instance.forEach);
实例属性将覆盖原型方法。