我有像这样的对象定义
var obj = { abcdefghijkl: 'abcdefghijkl', other_key: 1234 };
我可以在Javascript中将get属性本身的对象定义为字符串吗?喜欢这个
var obj = { abcdefghijkl: getSelfPropertyName, other_key: 1234 };
我不想要this.abcdefghijkl
答案 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);