Javascript这个关键字

时间:2017-06-26 03:27:43

标签: javascript this

我正在关注“you-dont-know-js”一书。我对以下代码有疑问:

var something = {
    cool: function() {
        this.greeting = "hello";
        this.count = this.count?this.count+1:1;
    }
};

something.cool();
console.log(something.greeting);
console.log(something.count);

var another = {
    cool: function() {
        //something.cool.call(this);
        something.cool()
    }
}

another.cool();
console.log(another.greeting);
console.log(another.count);

如果another.cool具有以下代码

something.cool()

而不是

something.cool.call(this);

我得到以下console.log

的输出未定义
console.log(another.greeting);
console.log(another.count);

默认情况下,不应该对此引用为“something”,输出为:

hello
2

1 个答案:

答案 0 :(得分:0)

当您致电something.cool();时,无论您是从全球范围还是another.cool内拨打该号码,this定义中的关键字something.cool仍然引用{ {1}}对象。

换句话说,(这是您实际问题的答案)调用something时不会更改something.cool();方法中this关键字的值定义

但是,当您从something.cool的定义中调用something.cool.call(this)时,您正在执行another.cool,就像它是something.cool对象的一部分一样,因为您传递给调用的another是对this对象的引用。

传递给another的参数用作被调用方法的 context 。在something.cool.call(this)方法定义中,another.cool关键字引用this对象。