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

jos*_*erk 1 javascript

我正在尝试为Object.prototype.equals分配一个函数,类似于在JavaScript中的Object比较中所做的.该函数运行正常,但每当我有jQuery时,我会得到如下错误:

name.replace不是一个函数

参考jquery-1.6.1.js中的第6490行.

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

Ray*_*nos 5

不要猴子补丁Object.prototype.

Object.prototype.replace = "lol";

for (var i in { "bar": 42 }) {
  alert(i);
}
// "bar"
// "replace" :(
Run Code Online (Sandbox Code Playgroud)

基本上,for ... in循环遍历对象中的所有属性,包括原型上定义的属性.这就是为什么扩展或改变真的很糟糕的原因Object.prototype.

有些人还去尽量"不要猴子补丁Array,String,Function,...".

你永远不应该搞砸了Object.prototype.其余的原生原型是一种风格选择.

定义你的功能Object.

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

var o = Object.replace(p);
Run Code Online (Sandbox Code Playgroud)

ES5:

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

Object.defineProperty(Object.prototype, "replace", {
  value: function() { }
});
Run Code Online (Sandbox Code Playgroud)