以字符串形式访问对象本身的PropertyName

时间:2017-04-21 12:45:30

标签: javascript

我有像这样的对象定义

var obj = { abcdefghijkl: 'abcdefghijkl', other_key: 1234 };

我可以在Javascript中将get属性本身的对象定义为字符串吗?喜欢这个

var obj = { abcdefghijkl: getSelfPropertyName, other_key: 1234 };

我不想要this.abcdefghijkl

3 个答案:

答案 0 :(得分:3)

  

我可以在Javascript中将get属性本身的对象定义为字符串吗?

不,没有快捷方式可以让您定义一个属性,其值与对象初始化程序中的属性名称​​相同。

可以分两步完成:

var s = "abcdefghijkl";
var obj = {other_key: 1234};
obj[s] = s;
console.log(obj);

如果你绝对必须在单个表达式中使用它,你可以使用临时函数,但它并不漂亮:

var obj = (function(s) {
  var o = {other_key: 1234};
  o[s] = s;
  return o;
})("abcdefghijkl");
console.log(obj);

答案 1 :(得分:0)

您可以使用ES6功能Proxy



var obj = { abcdefghijkl: 'getSelfPropertyName', other_key: 1234 },
    p = new Proxy(obj, {
        get: function(target, prop) {
            return target[prop] === 'getSelfPropertyName' ? prop : target[prop];
        }
    });
   
console.log(p.abcdefghijkl); // 'abcdefghijkl'




答案 2 :(得分:0)

这是一个通常可以通过构造模式的变体来解决的问题。让我们使用经典的方法。

function MyObject(...props){
  props.forEach((p,i) => this[p] = i ? "default value" : p);
}

var obj = new MyObject("abcdefghijkl", "other_prop", "yet_another_one");
console.log(obj);