JavaScript函数对象方法 - getter和setter

时间:2014-01-16 11:47:52

标签: javascript function oop methods getter-setter

我最近开始使用JavaScript,但我遇到了它使用的无类OOP样式。以下是我尝试使用的对象示例:

function block(id, text, distance) {
    this.id = id;
    this.text = text;
    this.distance = distance;

    this.getId = function () { return this.id };
    this.getText = function () { return this.text };
    this.getDistance = function () { return this.distance };
    this.addDistance = function (Distance) { this.distance = this.distance + Distance };
}

然而,这似乎不起作用。然后我在这里做了一些阅读:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects,这似乎建议我从我的函数中删除方法并使用我的块的原型对象添加它们:

block.prototype.getDistance = function () {
    return this.distance;
};

block.prototype.addDistance = function (Distance) {
    this.distance = this.distance + Distance;
};

但这似乎仍然不起作用。例如,如果我试图遍历一个块数组并加上距离:

var distTot = 10;
for (var i = 1; i < blocks.length; i++) {
   var set = setLarge[i];

   distTot = distTot + blocks[i - 1].getDistance;
};

我最终得到以下作为distTot变量的内容:“10function(){\ r \ n返回this.distance; \ r \ n}函数(){\ r \ n返回this.distance; \ r \ n}“

有没有人可以向我解释我做错了什么?我已经检查过它们是否正确实例化,一切看起来都很好。我很确定这只是方法无法正常工作。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

调用函数时,应添加(),因此请尝试getDistance()而不是getDistance

答案 1 :(得分:1)

getDistance是一个函数,所以你应该把它称为函数

distTot = distTot + blocks[i - 1].getDistance();

否则,正如您所注意到的,您获得了函数本身的字符串表示