JavaScript:是否可以替换像 Array.prototype.indexOf 这样的函数?

标签 javascript prototype

正如问题所说, 是否可以用自己的实现替换这些功能?

喜欢:

Array.prototype.forEach = function () {
    console.log("foo");             
};                         

那当然是一个愚蠢的替代品。但这更多的是关于可能性。我试过了,但似乎在运行时它没有被替换。

我的控制台记录了 foo。但是当我调用

[].forEach();

它也喊 log foo,它不起作用,直到我在控制台中再次替换 forEach 函数。

最佳答案

您的示例有效:

Array.prototype.forEach = function () {
    alert("foo");             
};    

[].forEach();

http://jsbin.com/xidew/1/

不过,这最终是不可取的。您正在改变应用程序和库所依赖的基本功能。如果您确实更改了这些函数,则必须小心不要破坏现有函数依赖它们的方式。

看看 underscore.js 编辑 forEach 的方式:

您可以看到,他们通过创建一个单独的 _.forEach() 函数避免改变每个数组使用 forEach 的方式。

然后其他库,如 Backbone,采用 forEach 并只覆盖数组的子类。 Like Backbone 覆盖了 Backbone 集合中的 forEach 方法。

这个故事的寓意是:

修改基对象类的原型(prototype),StringArrayObject 的情况极为罕见,因为这可能会带来灾难性的影响.如果需要,您可以创建这些基类的子类并在那里修改它以满足您自己的目的。这种子类化策略在 Backbone 和其他流行且广泛使用的 js 库中很明显。

关于JavaScript:是否可以替换像 Array.prototype.indexOf 这样的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164948/

相关文章:

javascript - 向从 api 响应获得的字符串添加其他字符

javascript - 在 Javascript 中为 Object 定义一个原型(prototype)函数可以吗?

javascript - 未捕获的 TypeError 不是函数 - 带有原型(prototype)的 javascript 类

javascript - JavaScript 中的原型(prototype)继承 : I don't usually need calling the constructor of Parent object assigned to Child. 原型(prototype)

java - Node.JS 位于 PHP 或 Rails 之前

javascript - css 菜单或脚本在 ie 上不起作用

JavaScript 逻辑

javascript - 如何将输入字段扩展到 div 末尾

javascript - 向原型(prototype)添加功能

forms - symfony2 多个嵌套表单原型(prototype)