[英]Array.prototype.includes vs. 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();
但这最终是不可取的。 您正在改变应用程序和库工作的基本功能。 如果确实改变了这些功能,则必须小心不要破坏现有功能依赖它们的方式。
看看下面的方式:underscore.js编辑forEach :
您可以看到他们通过创建单独的_.forEach()
函数来避免更改每个数组使用forEach
的方式。
然后其他库,如Backbone,采用forEach
,只覆盖它们的数组子类 。 像Backbone一样覆盖Backbone集合中的forEach
方法。
这个故事的寓意是:
由于可能具有灾难性的影响,修改基础对象类( String
, Array
, Object
的原型是极其罕见的情况。 如果需要,可以创建这些基类的子类并在那里修改它以满足您自己的目的。 这种子类化策略在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.