2011-06-13 88 views
1

我想分配一個函數Object.prototype.equals類似於在Object comparison in JavaScript做什麼。功能完美地工作,但每當我有jQuery的約,我得到這樣的錯誤:分配Object.prototype導致與jQuery的問題

name.replace不是一個函數

在jQuery的1.6.1.js參照線6490。

有誰知道爲什麼會發生這種情況?

+0

即使我刪除函數體中,只是返回true,我得到了同樣的問題。 – 2011-06-13 15:26:19

+0

http://stackoverflow.com/questions/1827458/prototyping-object-in-javascript-breaks-jquery – 2012-09-23 14:11:31

回答

5

不要猴子補丁Object.prototype

Object.prototype.replace = "lol"; 

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

for ... in基本上循環遍歷所有屬性中包括對原型定義那些對象。這就是爲什麼延長或改變Object.prototype是非常糟糕的做法。

有些人還走到儘可能「不要猴子補丁ArrayString,Function,...」。

你應該從來沒有Object.prototype混亂。其餘的原生原型是一種風格選擇。

定義你的功能Object

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

var o = Object.replace(p); 

ES5:

的ECMAScript 5中,您可以設置屬性,不可枚舉

Object.defineProperty(Object.prototype, "replace", { 
    value: function() { } 
}); 
+0

是的,我想我只是要創建一個獨立的功能。 – 2011-06-13 15:31:53