是否可以为对象提供动态 属性,或者为对象属性提供动态 值?例如:
var obj = {
a: 0,
b: 5,
c: //should always be a+b
}
显然我可以使用方法 c=function(){return a+b}
,但我总是需要使用大括号({{c
作为方法 1}}而不是obj.c()
)。这不会是一个问题,但我相信它必须以某种方式工作,因为obj.c
属性的构建也是属性而不是函数 。此属性会随对象更改动态,而不是函数...
length
属性值在没有更新的情况下发生变化......
我希望你能帮助我:)。
答案 0 :(得分:3)
在创建对象时定义getter,或稍后使用Object#defineProperty
添加:{/ p>
var obj = {
a: 0,
b: 5,
get c() { // assign it at object creation
return this.a + this.b;
}
};
console.log(obj.c);
// add it to existing object
Object.defineProperty(obj, 'd', {
get: function() {
return this.a + this.b + this.c;
}
});
console.log(obj.d);
答案 1 :(得分:1)
除了吸气剂之外,您还可以使用ES6功能Proxy
Proxy
对象用于定义基本操作的自定义行为(例如属性查找,赋值,枚举,函数调用等)。
var obj = {
a: 0,
b: 5,
},
p = new Proxy(obj, {
get: function(target, prop) {
return prop === 'c' ? target.a + target.b : target[prop];
}
});
console.log(p.c); // 5
答案 2 :(得分:0)
您可以使用getter:
var o = {
a : 0;
b : 1;
get c () {return this.a + this.b;}
}