2015-10-13 67 views
-1

是否可以創建一個像對象一樣的僞對象,但將返回的任何鍵作爲值返回給它?返回鍵值的Javascript對象?

var foo = new pseudoObject() 
foo['test'] -> 'test' 
food[1] -> 1 
foo.something -> 'something' 
Object.keys(foo) -> [] 

foo.next = "string"; 
foo.next -> 'next' 
Object.keys(foo) -> [] 

是否有可能?

的完整性 我有一個轉換表,它接受一個對象和交換機基於這些值的對象鍵的所有值..

"{{this}} is a {{sentence}}" 

Obj1 = {this: 'that', sentence: 'apple'} 

的事情是「這個」和「句'也是實際值。我選擇這樣做,因爲它使句子更具可讀性,而不是{{鍵}}是{{鍵2}},所以它也想在對象傳遞:

ObjOrginal = {this:'this',sentence:'sentence'} 

因爲那時我不會不需要改變任何東西。 把這個對象寫出來是不切實際的,所以我想知道是否有辦法創建這樣的對象。

+1

一個'Proxy'會做到這一點。但是,真的,你需要什麼? – Bergi

+0

我不想寫一個段落作爲目的,會對問題的答案產生影響 – lonewarrior556

+0

是的,這會有所作爲。 [有可能有更好的方法來解決你遇到的任何問題](http://meta.stackexchange.com/q/66377)。特別是在ES6之前的環境中也是如此。 – Bergi

回答

1

這是ES6功能。只有FF支持截至今天。但它做到了你想要的。

var handler = { 
    get: function(target, name){ 
     return name; 
    } 
}; 

var p = new Proxy({}, handler); 

你可以找到更多here

+0

是否有更通用的解決方案? – lonewarrior556

+0

你不需要爲'foo.next =「字符串」設置'陷阱';'什麼也不做? – Bergi

+0

其實它不會爲用戶做任何事情,因爲下一次調用(foo.next)無論如何會返回「下一個」 –