我正在构建一个简单的计算器,将其整合到一个简单的基于Web的POS系统中。我没有太多的JS经验,但我用C,C ++和C编程。 Java广泛。
在firefox调试器中,我得到一个异常TypeError:“this.getValue不是函数。”在方法updateDisplay()中调用它时。
JS不支持这种结构吗?在对象的方法中调用对象方法?
function KeyPad(divReference) {
this.divDisplay = divReference;
this.value = "0";
this.comma = false;
}
KeyPad.prototype.getValue = function () {
return parseFloat(this.value);
};
KeyPad.prototype.updateDisplay = function () {
$(document).ready(function () {
$(this.divDisplay).text(this.getValue());
});
};
KeyPad.prototype.keyPressed = function (valueString) {
if (valueString == '.' && this.comma === true) {
return;
}
this.value = this.value + valueString;
if (valueString == '.') {
this.comma = true;
}
this.updateDisplay();
};
KeyPad.prototype.reset = function () {
this.value = "0";
this.comma = false;
this.updateDisplay();
};
var keyPad = new KeyPad("#keypad_display");
答案 0 :(得分:2)
在你的函数updateDisplay中,this
没有引用你的KeyPad对象:它指的是$(文档),因为你不在同一个范围的函数如何被称为。
KeyPad.prototype.updateDisplay = function () {
//'this' is Keypad
$(document).ready(function () {
//'this' is $(document)
$(this.divDisplay).text(this.getValue());
});
};
我不认为(也许我错了)在一个函数中使用$(document).ready here是一个很好的做法。这应该只是修复你的错误:
KeyPad.prototype.updateDisplay = function () {
$(this.divDisplay).text(this.getValue());
};
正如sroes在评论中所说,你应该使用$(document).ready就像这样:
$(document).ready(function () {
var keyPad = new KeyPad("#keypad_display");
});