Использование полей объекта в JS? Доброго времени суток, при изучении и углублении в JS решил написать калькулятор, правда не очень сложный, но все же и столкнулся с проблемой: Uncaught ReferenceError: inputData is not defined.// The main JS File
'use strict';
var action = {
add: function(a, b) {
return a + b;
},
substract: function(a, b){
return a - b;
},
multiply: function(a, b){
return a * b;
},
devide: function(a, b) {
return a / b;
}
}
var tablo = {
statusLine: " ",
tabloHtml: document.getElementById("calculator-result"),
show: function(){
tabloHtml.innerHTML = statusLine;
},
setLine: function(str){
statusLine = str;
this.show();
},
}
var calculator = {
calc_action: action,
calc_tablo: tablo,
inputData: 0,
action: [],
digit: [],
addToData: function(value){
this.inputData += parseFloat(value);
this.calc_tablo.setLine(inputData);
this.logArray("Add to Data:");
},
addData: function(value){
this.inputData = parseFloat(value);
this.calc_tablo.setLine(inputData);
this.logArray("Add Data:");
},
clearData: function(){
this.inputData = 0;
},
logArray: function(str){
console.log(str);
console.log(this.action);
console.log(this.digit);
},
}
// Listen Digit button
var listen = function (){
var buttonName = this.getAttribute("class");
calculator.addToData(this.innerHTML);
}
window.onload = function(){
var buttons = document.querySelectorAll('button')
for (var i = 0; i < buttons.length; i++){
buttons[i].addEventListener('click', listen, false);
}
}
Буду признателен за объяснение почему, и как следует исправить.

21 Авг 2019 в 07:05
209 +1
0
Ответы
1

Ошибка "Uncaught ReferenceError: inputData is not defined" возникает потому, что внутри функции addToData вы обращаетесь к переменной inputData, не указывая явно, что это поле объекта calculator.

Чтобы исправить эту ошибку, вам нужно использовать ключевое слово this, чтобы указать, что inputData является полем объекта calculator. Вместо inputData используйте this.inputData.

Пример исправленного кода:

addToData: function(value){
this.inputData += parseFloat(value);
this.calc_tablo.setLine(this.inputData);
this.logArray("Add to Data:");
},
addData: function(value){
this.inputData = parseFloat(value);
this.calc_tablo.setLine(this.inputData);
this.logArray("Add Data:");
},

Также, в функции addData, учитывайте, что вы должны указывать this.inputData, а не просто inputData.

После внесения этих изменений, ошибка должна исчезнуть, и код должен работать правильно.

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир