【问题标题】:confusion over `this` keyword对`this`关键字的混淆
【发布时间】:2011-10-19 13:05:06
【问题描述】:

我正在阅读 crockford 的 Javascript:The Good Parts,并且正在处理课程调用模式中的这段代码:

var br = "<br />";

var add = function(a,b) {
    a + b;
}

var myObject = {
    value: 0,
    increment: function(inc) {
        this.value += typeof inc === "number" ? inc : 1;
    }
};

myObject.increment(2);
document.write(myObject.value + br);    // 2

myObject.increment();
document.write(myObject.value + br);    // 3

myObject.increment(3);
document.write(myObject.value + br);    // 5

myObject.double = function() {
    var that = this;

    var helper = function() {
        that.value = add(that.value,that.value);
            return that.value;
    };

    helper();
};

myObject.double();
document.write(myObject.value);     //undefined

在调用double 方法后,我得到了undefined。有谁知道为什么?

【问题讨论】:

  • 我认为这不是问题的原因,但不建议在 JavaScript 中使用保留字作为标识符。 double 是保留字。
  • @Jacob:50% 正确:允许在 Javascript 中使用特定数据类型的计划不再存在,因此 double 不再在最新标准的保留字列表中。由于许多人仍在使用将其定义为保留字的早期浏览器,因此您应该避免使用它。

标签: javascript oop this


【解决方案1】:

您的“add()”函数缺少return 语句:

var add = function(a,b) {
  return a + b;
}

没有return 语句的函数实际上是"returns" undefined

【讨论】:

  • 对不起伙计 - 这些问题总是那么令人兴奋
  • @Cem 我不明白为什么其他人不赞成你的。我们不是“谁先回答”比赛的评委。为你+1! :)
  • 我试图通过添加解释来弥补点差。
  • @j0k: 一般不是第一个提交的,如果我不写我被打了没人知道。它通常是获得最高票数的最高答案。顺便说一句,如果我看到相同的答案,我不会发布,但在我发送之前我什至没有看到新的答案发布文本。
【解决方案2】:

我认为你应该在 add 函数中返回结果:

var add = function(a,b) {
    return a + b;
}

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多