Javascript OOP,一个不起作用的简单计算器

时间:2014-05-05 12:10:26

标签: javascript oop object methods

我正在构建一个简单的计算器,将其整合到一个简单的基于Web的POS系统中。我没有太多的JS经验,但我用C,C ++和C编程。 Java广泛。

在firefox调试器中,我得到一个异常TypeError:“this.getValue不是函数。”在方法updateDisplay()中调用它时。

JS不支持这种结构吗?在对象的方法中调用对象方法?

http://jsfiddle.net/uPaLS/33/

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");

1 个答案:

答案 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");
 });