正如问题所说, 是否可以用自己的实现替换这些函数?
像:
Array.prototype.forEach = function () {
console.log("foo");
};
那是 - 当然 - 一个愚蠢的替代品。但这更多是关于这种可能性。我尝试过,但是在运行时它似乎没有被替换。
我的控制台记录foo
。但是,当我打电话给
[].forEach();
也喊出日志foo
,它不起作用,直到我在控制台中再次替换forEach函数。
答案 0 :(得分:6)
您的示例有效:
Array.prototype.forEach = function () {
alert("foo");
};
[].forEach();
这最终是不受欢迎的。您正在改变应用程序和库工作的基本功能。如果你确实改变了这些功能,你必须小心不要破坏现有功能依赖它们的方式。
查看underscore.js编辑方式forEach:
您可以看到他们通过创建单独的forEach
函数来避免更改每个数组使用_.forEach()
的方式。
然后其他库(如Backbone)接受forEach
并仅覆盖其数组的子类。与Backbone一样,它会覆盖Backbone集合中的forEach
方法。
这个故事的寓意是:
极少见的情况是修改基础对象类的原型String
,Array
,Object
,因为它可能具有灾难性的影响。如果需要,可以创建这些基类的子类并在那里修改它以满足您自己的目的。这种子类化策略在Backbone和其他流行且广泛使用的js库中很明显。
答案 1 :(得分:0)
您可以做的是将代码添加到外部文件default.js中,并将脚本标记添加到布局html(其余所有页面使用的主页面)
<head>
<title>Title</title>
<link href="Content/default.css" rel="stylesheet" />
<script src="Scripts/default.js"></script>
</head>
它将始终被其他js代码拾取,因为它将始终加载到页面中。