Javascript这个关键字
我在看《你不知道js》这本书。我对以下代码有疑问: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
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()调用code>不会更改方法定义中找到的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----->有点困惑,我知道,谢谢:)当你的后一种情况下打这个问候语=“你好”时,这将指的是一些事情。而你正试图通过另一个来打印。问候语。另一个人的冷静不会影响他在电话里所做的事情。