【问题标题】:JavaScript function object methods - getters and settersJavaScript 函数对象方法 - getter 和 setter
【发布时间】:2014-01-16 11:47:51
【问题描述】:

我最近开始使用 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 return this.distance;\r\n }function () {\r\n return this.distance;\ r\n }"

谁能向我解释我做错了什么?我已经检查过它们是否被正确实例化,并且那里的一切似乎都很好。我很确定这只是无法正常工作的方法。 提前致谢!

【问题讨论】:

  • 原型和this 代码应该都可以工作。您能否向我们展示您是如何实例化您的 block 对象的,您是如何调用构造函数的?顺便说一句,你忘了调用 getDistance 方法。
  • @Bergi 似乎没有实例化 getDistance 方法是问题所在,谢谢!

标签: javascript function oop methods getter-setter


【解决方案1】:

当你调用一个函数时,你应该添加(),所以尝试getDistance()而不是仅仅getDistance

【讨论】:

  • 哇哦!我真傻。非常感谢您的帮助。我的 9 分钟一到我就会接受这个答案!
【解决方案2】:

getDistance 是一个函数,所以你应该在这里调用它作为一个函数

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

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

【讨论】:

  • 谢谢,之前没看懂调用函数和获取字符串值的区别!
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2022-12-24
  • 2011-04-14
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多