2015-10-13 65 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)无论如何会返回“下一个” –