Можно ли дать объекту динамическое свойство или, скорее, присвоить свойству объекта динамическое значение ? Например:

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

Очевидно, я мог бы использовать метод c=function(){return a+b}, но тогда мне всегда нужно было бы вызывать c как метод , используя фигурные скобки (obj.c() вместо obj.c). На самом деле это не будет проблемой, но я верю, что это должно как-то работать, поскольку свойство build length также является свойством , а не функцией . , Это свойство изменяется динамически вместе с объектом и не является функцией ...

var str = "hello world";
console.log(str.length); //11
str = "hello stack overflow";
console.log(str.length); //20

Значение свойства изменяется без обновления ...

Я надеюсь, что вы можете помочь мне :)

4
Anton Ballmaier 9 Янв 2017 в 19:29

2 ответа

Лучший ответ

Определите геттер при создании объекта, или добавьте его позже, используя Object#defineProperty :

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);
3
Ori Drori 9 Янв 2017 в 16:45

Вы можете использовать getter:

var o = {
   a : 0; 
   b : 1;
   get c () {return this.a + this.b;}

}
0
kemiller2002 9 Янв 2017 в 16:31