1

片段 A

var instance = [];

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

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

在代码片段 A 中,如果我向实例变量添加属性instance,并且不小心覆盖了一个原型方法(在这种情况下forEach),那么当我执行时实际会调用哪个方法:

instance.forEach()

原型版还是属性版?

我试图弄清楚为什么下划线似乎有复杂的类型检查,特别是这一行:

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

为什么不只是:

if (obj.forEach) {

因为obj已经被证实不是nullor undefined

4

1 回答 1

1

我发现这会覆盖原型版本。即使您在属性分配之后分配原型版本。

这是小提琴。记录该函数会将其打印出来,您可以在控制台中检查它并查看它是属性版本。

小提琴代码:

var instance = [];

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

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

console.log(instance.forEach);

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

于 2013-07-22T14:40:53.443 回答