动态属性值而不是函数?

时间:2017-01-09 16:29:29

标签: javascript object methods dynamic properties

是否可以为对象提供动态 属性,或者为对象属性提供动态 ?例如:

var obj = {
    a: 0,
    b: 5,
    c: //should always be a+b
}

显然我可以使用方法 c=function(){return a+b},但我总是需要使用大括号({{c作为方法 1}}而不是obj.c())。这不会是一个问题,但我相信它必须以某种方式工作,因为obj.c属性的构建也是属性而不是函数 。此属性会随对象更改动态,而不是函数...

length

属性值在没有更新的情况下发生变化......

我希望你能帮助我:)。

3 个答案:

答案 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;}

}