2016-01-10 2 views

ответ

3

вам нужно использовать в инлайн добытчика закодировать саморефлексии выражения в литералов вроде этого:

var obj = { 
    a: { 
    value: 1 
    }, 

    b: { 
    value: 2 
    }, 

    get sum(){ 
    return this.a.value + this.b.value 
    } 
}; 

console.log(obj.sum); // shows: 3 

это ES5, но часто по-смотрел. он работает во всех основных браузерах (даже IE8) и узле.

синтаксис getter хорош, потому что obj.sum оба действуют как число и остаются обновленными автоматически как a и b изменение.

конечно, это, вероятно, более традиционное использование метода (функции) и назовите его как obj.sum(), поскольку это указывает на другие кодеры, что это «вычислен свойство» более или менее ...

+0

Спасибо, ребята. Благодарю. – Aleksandr

+0

Команда ** 'get' ** выступает в качестве сокращенного обозначения для ** [Object.defineProperty()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) **. например 'Object.defineProperty (obj," sum ", {get: function() {return this.a.value + this.b.value;}});' – jherax

4

sum сам предполагают, чтобы быть функцией JavaScript. Так это справедливо:

var obj = { 
    a: { 
     value: 1 
    }, 

    b: { 
     value: 2 
    }, 

    get sumValue(){ 
     return this.a.value + this.b.value 
    } 
}; 

Вы можете узнать больше о методах объекта here.

+1

что такое '' значение: в сумме()? кажется немного запутанным для обозначения этого выражения по косметическим причинам ... он также ничего не возвращает, так что это не будет работать, как показано ... – dandavis

+0

@Dsafds, не работает – Aleksandr

+0

Синтаксис этого инициализатора объекта недействителен. – Oriol

0

Это выглядит как вы пытаетесь добавить метод к объекту, если это так должно быть примерно так:

var obj = { 
    a: { 
    value: 1 
    }, 
    b: { 
    value: 2 
    }, 
    sum:function() { 
    return this.a.value + this.b.value 
    } 
}; 

console.log(obj.sum); //Returns the function object 
console.log(obj.sum()); //Returns the value 3 
1

Внутри инициализатора объекта, объект не был присвоен переменной obj еще. Затем obj не определен, поэтому вы не можете использовать obj.a.value.

Но вы можете достичь что-то похожее на инстанцировании анонимную функцию:

var obj = new function() { 
    this.a = { 
    value: 1 
    }; 
    this.b = { 
    value: 2 
    }; 
    this.sum = { 
    value: this.a.value + this.b.value 
    }; 
}; 
+1

Это хороший пример конструктора anon. я думаю, что с помощью 'Object.assign' для очистки статики/уменьшения веса это должно быть более популярным в шаблоне, чем мы видим там. это хорошее предложение. конечно, есть баланс, и это стоит больше, чем буквальный, но мне нравится возможность запускать с помощью произвольного кода ... – dandavis