путаница из-за ключевого слова this - PullRequest
1 голос
/ 04 августа 2011

Я читаю Javascript Крокфорда: «Хорошие части» и возлюсь с этим фрагментом кода из шаблонов вызова урока:

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.Кто-нибудь знает почему?

Ответы [ 2 ]

10 голосов
/ 04 августа 2011

В вашей функции add () отсутствует оператор return:

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

Функция без оператора return на самом деле "возвращает" undefined .

5 голосов
/ 04 августа 2011

Я думаю, вы должны вернуть результат в функции добавления:

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