繁体   English   中英

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

[英]JavaScript: Is it possible to replace functions like Array.prototype.indexOf?

正如问题所说,是否有可能用自己的实现取代这些功能?

喜欢:

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 ,只覆盖它们的数组子类 像Backbone一样覆盖Backbone集合中的forEach方法。

这个故事的寓意是:

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

你可以做的是将代码添加到外部文件default.js并将一个脚本标记添加到布局html(所有其余页面使用的主页)

<head>
    <title>Title</title>
    <link href="Content/default.css" rel="stylesheet" />
    <script src="Scripts/default.js"></script>
</head>

它将始终被其他js代码拾取,因为它将始终加载到页面中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM