将方法添加到本机JavaScript对象(如Object,Function,Array,String等)被视为不良做法。
但我不明白为什么?
有人可以透露这个吗?
提前致谢。
答案 0 :(得分:6)
因为您可能碰巧使用了一个定义了具有相同名称的函数的库,但是以另一种方式工作。
通过覆盖它,你打破了另一个库的行为,然后你在调试模式下挠头。
修改强>
如果你真的想在prependMyCompanyName(...)
原型中添加一个非常令人不快的名称String
的方法,我认为从最重要的角度看它几乎没有风险。但我希望你不必经常打字......
在我看来,最好的方法是定义一个MyCompanyUtils
对象(你可以找到像$Utils
这样的快捷方式),并使它有一个{{1方法。
答案 1 :(得分:1)
我认为两个重要原因是:
它使您的代码更难阅读。您只需编写一次代码并多读一遍。如果您的代码最终落入他人手中,他可能不会立即知道您的所有对象都有.to_whatever方法。
它会导致名称空间冲突。如果您尝试将覆盖Object.prototype的库放到另一个库中,则可能会导致与其他人做同样事情的问题。
答案 2 :(得分:1)
还有一个影响,即增加Object原型在for...in
循环上需要考虑:
Object.prototype.foo = 1;
var obj = {
bar: 2
};
for (var i in obj) {
window.alert(i);
}
// Alerts both "foo" and "bar"