2014-10-29 26 views
0

我希望能夠創建具有自身內在價值的對象。這樣我可以在表達式中使用它,就好像它是一個常規變量。事實證明,這很容易 - 我很想知道我是否缺少一些東西。所有它似乎需要確保對象包含一個方法「valueOf」。像這樣:具有自身內在價值的物體。另一種做吸塵器的方法

var p = { 
    a: 12; 
    valueOf: function(){return this.a+12} 
    } 

alert(p/3); // =8 

這也許是一個好主意,也包括一個「toString」方法。似乎發生的事情是,如果沒有valueOf方法,對該對象的引用會沿着原型鏈向上,直到它找到Object上的方法,它只返回「object Object」。通過提供一個本地的方法,該方法可以返回任何東西。

它似乎適用於我嘗試過的所有瀏覽器。

這是另一種提供類似getter功能的方法。但更好一點,因爲getter只能應用於對象的屬性。這樣你可以使用對象本身。

您認爲如何?這安全嗎?任何陷阱?

+1

*「這是另一種提供類似getter功能的方法」 - 如何? Getters爲成員提供訪問權限,在這裏你重寫對象本身的價值。 – Madbreaks 2014-10-29 17:13:41

+0

是的。但它就像一個吸氣器,你可以用一個類似變量的引用來引用這個值。此外,該對象仍然具有全部屬性。這只是一個額外的事情,你可以做的對象。 – 2014-10-29 23:59:50

回答

0

那麼我開始使用這種模式,並發現一個問題。如果你創建一個像上面那樣的對象,你必須猜測解釋器將如何查看對象的引用。

例如,如果在算術表達式中使用P,則會調用該對象的valueOf()方法以獲取其值。但是當你嘗試訪問p的一個屬性,比如p.a時,它會將p視爲一個對象並按照你的預期檢索屬性。

在一個getter中,相比之下,當p上有一個getter時訪問p.a將首先運行getter,然後嘗試獲得結果的屬性'a'。有點不同,但很重要。

這一切都很正確,似乎正確地猜測要做什麼。但使用模式確實依賴於瞭解這種行爲,哪個AFAIK沒有記錄在任何地方。

相關問題