Javascript这个关键字

Javascript这个关键字,javascript,this,Javascript,This,我在看《你不知道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 anothe

我在看《你不知道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);
如果另一个.cool具有以下代码

something.cool()
而不是

something.cool.call(this);
对于下面的console.log,我得到了未定义的输出

console.log(another.greeting);
console.log(another.count);
默认情况下,对它的引用不应该是“某物”,输出不应该是:

hello
2

当你调用
something.cool()时
,无论您是从全局范围还是从另一个.cool中调用它,在
某物的定义中,关键字
this
仍然指
某物
对象

换句话说,(这就是你实际问题的答案)其中
something.cool()不会更改
方法定义中找到的
something.cool
关键字的值

然而,当您从
另一个.cool
的定义中调用
something.cool.call(this)
时,您正在执行
something.cool
,就好像它是
另一个
对象的一部分,因为您传递给调用的
这个
是对
另一个
对象的引用


传递给
something.cool.call(this)
的参数用作被调用方法的上下文。在
另一个.cool
方法定义中,
this
关键字指的是
另一个
对象。

something.cool()
调用第一个
cool()
方法,将
this
设置为
something
,而
something.cool.call(this)
调用
cool()
,将
this
设置为
other
。当您通过something.cool()调用时,这是绑定到某个对象的,这就是它不会影响另一个对象的原因。即使在另一个cool函数中调用它。在您的代码中,这是由函数的调用方式设置的,因此如果您使用不同的this调用它,您会得到不同的结果。nnnnnn-->我知道,我想知道的是,当我在另一个.cool()中调用某个.cool()时……为什么两个控制台都没有定义。。。。。李骏骁------>那么这种情况下的默认绑定不适用???对不起,我对RobG----->有点困惑,我知道,谢谢:)当你的后一种情况下打这个问候语=“你好”时,这将指的是一些事情。而你正试图通过另一个来打印。问候语。另一个人的冷静不会影响他在电话里所做的事情。