2014-02-10 48 views
2

我想改變的值,即返回形式的JavaScript對象用下面的代碼:在vanilla JavaScript中是否有類似prototype.toArray的函數?

F.prototype.valueOf = function(){return "foo";} 
F.prototype.toString = Id.valueOf(); 

「F」作爲JavaScript類和「富」我是返回的字符串。 此呼籲,像這樣的警告時,正常工作:

alert(F()); //alerts foo 

但有什麼辦法,一個對象的值可以是一個數組?也許像

F.prototype.valueOf = function(){return ["foo", "bar"];} 
F.prototype.toArray = Id.valueOf(); 

回答

5

valueOf只能轉換並返回原始值,所以不能強制它返回Array。您可以嘗試使用JSON.Stringify來返回JSON字符串,該字符串可能會在以後解析。另請參閱this articleMDN documentation。當然

你也可以寫一個自定義的 '吸氣' 功能來檢索您的自定義的valueOf,是這樣的:

F.prototype.getValue = function() {return ['foo', 'bar']}; 

例如

var someobj = { 
       bar: 1, some: [1,2,3], 
       x: 'string', foo:[{a:1,b:2},2,3], 
       valueOf: function(){return JSON.stringify(this);} 
       }; 
someobj.valueOf(); 
//=> "{"bar":1,"some":[1,2,3],"x":"string","foo":[{"a":1,"b":2},2,3]}" 
+0

謝謝!太糟糕了,但我想返回的數組包含混合數據類型,不僅是字符串。所以我不能使用JSON我猜... – Ood

+1

也許你不應該在這種情況下覆蓋'valueOf'。 – Tibos

+1

@Ood:看到這個例子,混合值不應該是一個問題。 @Tibos:是的,如果需要來自'valueOf'的特殊值,還可以爲它寫一些'get'方法。 – KooiInc

相關問題