【问题标题】:Javascript object that returns key as value?将键作为值返回的Javascript对象?
【发布时间】:2015-10-13 17:28:41
【问题描述】:

是否可以创建一个伪对象,其行为类似于对象,但返回作为值传递给它的任何键?

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'} 

问题是“this”和“sentence”也是实际值。我选择这样做是因为它使句子更具可读性,而不是 {{key1}} is a {{key2}} ,所以它也想传入对象:

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

因为那样我就不必改变任何东西了。 写出这个对象是不切实际的,所以我想知道是否有办法创建这样一个对象。

【问题讨论】:

  • Proxy 会这样做。但说真的,你需要这个做什么?
  • 我不想写一个关于目的的段落,这会对问题的答案产生影响
  • 是的,它会有所作为。 There's likely a better way to solve whatever problem you're having。尤其是在 ES6 之前的环境中也可以使用。
  • 那个伪对象解决了什么问题?你在哪里使用它?

标签: javascript underscore.js lodash


【解决方案1】:

这是 ES6 的特性。到目前为止,仅 FF 支持。但它会做你想做的事。

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

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

你可以找到更多here

【讨论】:

  • 难道你还需要一个set 陷阱让foo.next = "string"; 什么都不做吗?
  • 实际上它对用户没有任何作用,因为下一次调用 (foo.next) 无论如何都会返回“next”
  • @Bergi - 哦,我明白你的意思了。在那里我需要防止创建该属性。我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2017-08-10
  • 2021-07-14
  • 2022-08-18
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
相关资源
最近更新 更多