2011-12-12 85 views
1

這些天我一直在與這些腳本一起,並在一番研究後,我仍然無法找到答案。如何使用Object.prototype向Object構造函數添加函數?

因此,這裏的問題,我想(例如)增加一個功能爲對象(。長度()的情況下,由於本地沒有這個還沒有),我試過:

Object.prototype.length = function() { /* Some fancy work */ }; //It works! 

Object.prototype["width"] = function() { /* Some fancy work */ }; //It works! 

/* But the following DOESN'T work */ 
Object.prototype = { 
    length: function() { /* Some fancy work */ }, 
    width: function() { /* Some other fancy work */ } 
}; 

最後一個不起作用,這是使用像這樣的對象添加函數的最短途徑,我不知道爲什麼。我遇到過這些代碼(例如來自jQuery 1.7.1),我試圖弄清楚它是如何工作的,但我不適用於我。我認爲它必須以某種方式工作,因爲jQuery使用它,你能告訴我怎麼樣?

我已經看到了很多使用這些代碼的人:

a = { 
    b: "Something", 
    c: function() {} 
} 

和其他人使用:

a.prototype = { 
    b: "Something", 
    c: function() {} 
} 

那麼有什麼區別?這與第一個問題有某種關係,所以我很想完全理解它。

+0

SO上的每個帖子都是一個問題。請一次寫出一個問題_,而不是三合一。你應該在9個月後知道這件事! –

+0

我會立即提出第三個問題。感謝提醒和抱歉。 [x] – xx3004

回答

1

1),因爲你想更換內置對象的功能只有兩個方法全不能使用

Object.prototype = { 
    length: function() { /* Some fancy work */ }, 
    width: function() { /* Some other fancy work */ } 
}; 

。這將打破整個系統。

2)Object.method()是其他語言的靜態方法的模擬。它由僞類擁有,而不是由它的每個實例擁有。同時Object.prototype.method是常規方法或領域的模擬。它只能使用實例訪問。

3)在對象創建時觸發的自動功能是Object。你不能修改,因爲這是一個內置對象。

+0

嗨比約恩,感謝您的快速回復。對於第一個問題,我現在完全清楚,我沒有注意到我正在替換Object()的整個系統。我想問一下,如果沒有循環遍歷每個Object.prototype.Name,是否有添加屬性?你有沒有更多的靜態方法和模擬方法的例子,或者一篇文章會幫助很多。而對於第三個問題,這意味着沒有,沒有辦法解決,對嗎? [X] – xx3004

相關問題