我正在尝试为 Object.prototype.equals 分配一个函数,类似于 Object comparison in JavaScript 中所做的.该函数运行完美,但每当我使用 jQuery 时,我都会收到如下错误:
name.replace is not a function
引用jquery-1.6.1.js中的6490行
有谁知道为什么会这样?
最佳答案
不要猴子修补 Object.prototype
。
Object.prototype.replace = "lol";
for (var i in { "bar": 42 }) {
alert(i);
}
// "bar"
// "replace" :(
基本上 for ... in
循环遍历对象中的所有属性包括在原型(prototype)上定义的属性。这就是为什么扩展或更改 Object.prototype
是非常糟糕的做法。
有些人甚至达到了“不要猴子修补 Array
、String
、Function
,...”。
你不应该永远弄乱Object.prototype
。 native 原型(prototype)的其余部分是样式选择。
在 Object
上定义您的函数。
Object.replace = function() { ... };
var o = Object.replace(p);
ES5:
使用 ecmascript 5,您可以将属性设置为不可枚举
Object.defineProperty(Object.prototype, "replace", {
value: function() { }
});
关于javascript - 分配 Object.prototype 会导致 jQuery 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332480/