阿晨1998
2019-11-18 14:22:39
我在頁(yè)面上添加了一個(gè)簡(jiǎn)單的.js文件,該文件在Object和Array原型中添加了一些非常普通的常見(jiàn)任務(wù)功能。經(jīng)過(guò)反復(fù)試驗(yàn),我發(fā)現(xiàn)向,添加任何函數(shù)Object.prototype,無(wú)論其名稱(chēng)或功能如何都會(huì)導(dǎo)致jQuery中的Javascript錯(cuò)誤:罪魁禍?zhǔn)??Object.prototype.foo = function() { /*do nothing and break jQuery*/};我jquery-1.3.2.js在attr:function {}聲明中得到的第1056行的錯(cuò)誤:/*Object doesn't support this property or method*/name = name.replace(/-([a-z])/ig, function(all, letter) { return letter.toUpperCase(); });顯然G.replace是未定義的。很明顯,有些事情我只是沒(méi)有用原型制作而已,但我很痛苦地未能弄清楚它是什么。明確地說(shuō),我不是在尋找解決方法,而是已經(jīng)解決了……我在尋找的是對(duì)“ 為什么”的答案。。為什么添加一個(gè)函數(shù)來(lái)Object.prototype破壞這段代碼?
3 回答
慕碼人2483693
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
你永遠(yuǎn)不應(yīng)該擴(kuò)展Object.prototype。它所做的遠(yuǎn)不止打破jQuery。它完全破壞了Javascript的“對(duì)象作為哈希表”功能。不要這樣
慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果僅是在循環(huán)中弄亂...的情況,您是否可以使用Object.defineProperty來(lái)添加fn而不使其成為可枚舉的?
所以:
Object.defineProperty(Object.prototype, "foo", {
value: function() {
// do stuff
},
enumerable : false
});
似乎為我工作。還是會(huì)認(rèn)為這是錯(cuò)誤的形式?
添加回答
舉報(bào)
0/150
提交
取消
