将方法添加到本机JavaScript对象

时间:2009-09-21 11:36:23

标签: javascript

将方法添加到本机JavaScript对象(如Object,Function,Array,String等)被视为不良做法。

但我不明白为什么?

有人可以透露这个吗?

提前致谢。

3 个答案:

答案 0 :(得分:6)

因为您可能碰巧使用了一个定义了具有相同名称的函数的库,但是以另一种方式工作。

通过覆盖它,你打破了另一个库的行为,然后你在调试模式下挠头。

修改

如果你真的想在prependMyCompanyName(...)原型中添加一个非常令人不快的名称String的方法,我认为从最重要的角度看它几乎没有风险。但我希望你不必经常打字......

在我看来,最好的方法是定义一个MyCompanyUtils对象(你可以找到像$Utils这样的快捷方式),并使它有一个{{1方法。

答案 1 :(得分:1)

我认为两个重要原因是:

  1. 它使您的代码更难阅读。您只需编写一次代码并多读一遍。如果您的代码最终落入他人手中,他可能不会立即知道您的所有对象都有.to_whatever方法。

  2. 它会导致名称空间冲突。如果您尝试将覆盖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"