Переменная не сохраняется при использовании конструктора - PullRequest
0 голосов
/ 04 октября 2018

Итак, я использую конструктор, подобный этому

const RPNCalculator = function () {
  let methods = {
  numberList: [],
  calc: 0,   
  push(num) {
   this.numberList.push(num);
  },
  plus() {
    for (let i = 0; i <= this.numberList.length; i++) {
      console.log('before:' + this.calc);
      this.calc = this.calc + this.numberList[i];
    }
    console.log('after:' + this.calc);
    this.numberList = [];  
  }
};
  return methods;
}

const rpnCalculatorInstance = new RPNCalculator; 

Первый файл console.log печатает правильно и добавляет элементы, но второй console.log печатает NaN.Я использовал этот шаблон ранее с Object.create, но по какой-то причине переменная this.calc не сохраняется при использовании конструктора.Любая помощь приветствуется!

Ответы [ 2 ]

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

Вы можете использовать Reduce для суммирования массива https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

Выполнить фрагмент ниже

class RpnCalculator{
 constructor(){
  this.numberList = [];
  this.push = (num) => { this.numberList = [...this.numberList, num ]}
  this.sum = () => {return this.numberList.reduce(( a, c) => a + c, 0);}
  }
}

const rpnCalculator = new RpnCalculator();
rpnCalculator.push(1)
rpnCalculator.push(2)
rpnCalculator.push(3)
console.log(rpnCalculator.sum());
0 голосов
/ 04 октября 2018

Очевидно, с набором данных, который мне дали, последний элемент в массиве был неопределенным элементом.Я исправил это с помощью

    if (typeof (this.numberList[i]) === 'number') {
      console.log('before:' + this.calc);
      this.calc = this.calc + this.numberList[i];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...