Я пытаюсь создать простой калькулятор JavaScript. Тем не менее, когда я запускаю мой код и внести изменения в любой из трех полей (значение коробки или знака), я получаю сообщение об ошибке с указаниемПроблемы с закрытием и ключевым словом «this» в JavaScript
this.calculate не является функцией
ошибка приходит вверх в соответствии с этим. Калькуляция для любой функции прототипа вызывается в зависимости от того, измените ли вы свое числовое значение или знак формулы.
Я читал о закрытии, обратном вызове и ключевом слове «это», и я считаю, что проблема там где-то там, где я называю свои прототипы. Кто-нибудь поможет объяснить, где в моем коде я делаю ошибку и как ее решить?
Вот JavaScript
var Formula=function() {
this.value1 = null;
this.value2 = null;
this.sign = null;
this.result = null;
};
Formula.prototype.calculate = function() {
switch (this.sign) {
case '+':
this.result = this.value1 + this.value2;
break;
case '-':
this.result = this.value1 - this.value2;
break;
case '/':
this.result = this.value1/this.value2;
break;
case '*':
this.result = this.value1 * this.value2;
break;
default:
break;
}
document.querySelector('#result').innerHTML = this.result;
};
Formula.prototype.updateValue = function(event) {
if (event.currentTarget.id === '#value1')
this.value1 = parseFloat(event.currentTarget.value);
else this.value2 = parseFloat(event.currentTarget.value);
this.calculate();
};
Formula.prototype.updateSign = function(event) {
this.sign = event.currentTarget.value;
this.calculate();
};
document.addEventListener('DOMContentLoaded', function() {
(function() {
var equation = new Formula();
document.querySelector('#sign').addEventListener('change', equation.updateSign);
var values = document.querySelectorAll('.value');
for (var i = 0, numValues = values.length; i < numValues; i++) {
values[i].addEventListener('change', equation.updateValue);
}
})();
});
А вот HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="calcJS.js"></script>
</head>
<body>
<input type="number" class="value" id="value1"/>
<select id="sign">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="number" class="value" id="value2"/>
=
<span id="result"/>
</body>
</html>
Привет, Пожалуйста, не теряйте свой пост после того, как вы воспользовались им. Это похоже на вырубку дерева после укрытия под ним. Пожалуйста, позвольте другим будущим пользователям получить знания. Ответчики приложили бы немало усилий. Не тратьте свое драгоценное время впустую. –
Извините, я пытался переделать код и внести изменения и задать другой вопрос, вместо этого сделать еще одну запись. – sota7green
@ sota7green не делайте этого либо xD Если у вас есть другой вопрос, * задайте другой вопрос *, не редактируйте текущий. –