分配Object.prototype会导致jQuery出现问题

时间:2011-06-13 15:25:23

标签: javascript

我正在尝试将一个函数分配给Object.prototype.equals,类似于Object comparison in JavaScript中的函数。该函数运行正常,但每当我有jQuery时,我都会遇到如下错误:

  

name.replace不是函数

引用jquery-1.6.1.js中的第6490行。

有谁知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:5)

不要追逐补丁Object.prototype

Object.prototype.replace = "lol";

for (var i in { "bar": 42 }) {
  alert(i);
}
// "bar"
// "replace" :(

基本上for ... in循环遍历对象中的所有属性,包括在原型上定义的属性。这就是为什么扩展或更改Object.prototype非常糟糕的做法。

有些人还会选择“不要追逐ArrayStringFunction,......”。

你应该永远混淆Object.prototype。其余的原生原型是一种风格选择。

Object上定义您的功能。

Object.replace = function() { ... };

var o = Object.replace(p);

<强> ES5:

使用ecmascript 5,您可以将属性设置为不可枚举

Object.defineProperty(Object.prototype, "replace", {
  value: function() { }
});
相关问题