Добавление чисел в методе объекта в JavaScript - PullRequest
0 голосов
/ 28 октября 2018

Скажите, у меня есть следующий объект:

var my_object = {
    value1: "220",
    value2: "100",
    value3_1: "300",
    value3_2: "300",
    value3: function() {
        return +this.value3_1 + +value3_2;
    }
};

Что мне нужно сделать, чтобы эта работа?В консоли my_object.value3 возвращает:

() {
        return +this.value3_1 + +this.value3_2;
    }

.. вместо '600'.

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Использовать геттер

var my_object = {
 value1: 220,
 value2: 100,
 value3_1: 300,
 value3_2: 300,
 get value3() {
    return this.value3_1 + this.value3_2;
 }
};

console.log(my_object.value3);

Таким образом, вам не нужно «знать», какая из них является функцией, а какая нет.

Например, скажем, вам нужно прочитатьвсе значения, которые вы можете сделать:

Object.keys(my_object).forEach(k => console.log(k, my_object[k]))

В то время как без геттера вам необходимо:

Object.keys(my_object).forEach(k => console.log(k, 
    typeof my_object[k] === 'function' ? my_object[k]() : my_object[k]))
0 голосов
/ 28 октября 2018

Когда вы вызываете функцию, вам нужно использовать скобки ().Так что это должно быть my_object.value3 () .

Также необходимо заменить value3_2 на this.value3_2

В качестве альтернативы, value3_1 и value3_2 оба числа, поэтому не нужно давать кавычки.Просто вы можете написать 300.

var my_object = {
  value1: 220,
  value2: 100,
  value3_1: 300,
  value3_2: 300,
  value3: function() {
    return this.value3_1 + this.value3_2;
 }
};
0 голосов
/ 28 октября 2018

Возможно, вы захотите сделать это:

var my_object = {
 value1: "220",
 value2: "100",
 value3_1: 300,
 value3_2: 300,
 value3: function() {
    return +this.value3_1 + this.value3_2;
 }
};

и затем вызвать функцию с этим: my_object.value3()

Примечание: я добавил this перед значением 3_2 ​​и изменилзначение value3 _1 и value3_2 для чисел из строки удаляет двойные кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...