正如问题所说, 是否可以用自己的实现替换这些功能?
喜欢:
Array.prototype.forEach = function () {
console.log("foo");
};
那当然是一个愚蠢的替代品。但这更多的是关于可能性。我试过了,但似乎在运行时它没有被替换。
我的控制台记录了 foo
。但是当我调用
[].forEach();
它也喊 log foo
,它不起作用,直到我在控制台中再次替换 forEach 函数。
最佳答案
您的示例有效:
Array.prototype.forEach = function () {
alert("foo");
};
[].forEach();
不过,这最终是不可取的。您正在改变应用程序和库所依赖的基本功能。如果您确实更改了这些函数,则必须小心不要破坏现有函数依赖它们的方式。
看看 underscore.js 编辑 forEach 的方式:
您可以看到,他们通过创建一个单独的 _.forEach()
函数避免改变每个数组使用 forEach
的方式。
然后其他库,如 Backbone,采用 forEach
并只覆盖数组的子类。 Like Backbone 覆盖了 Backbone 集合中的 forEach
方法。
这个故事的寓意是:
修改基对象类的原型(prototype),String
,Array
,Object
的情况极为罕见,因为这可能会带来灾难性的影响.如果需要,您可以创建这些基类的子类并在那里修改它以满足您自己的目的。这种子类化策略在 Backbone 和其他流行且广泛使用的 js 库中很明显。
关于JavaScript:是否可以替换像 Array.prototype.indexOf 这样的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164948/