[英]Weird behavior of bound function
有人可以解释这里发生了什么吗?
var dog = {
name: "Dogo"
}
var echo = function() {
console.log(this);
}
dog.echo = echo.bind(this);
echo();
dog.echo();
第一个echo()
按预期打印出全局对象。 但是,第二个打印的空对象{}
与第一个echo()
打印的内容不符。 为什么?
编辑:对不起! 我没有提到代码是由nodejs解释器运行的!
谢谢你的帮助。
在nodejs模块的主要范围内, this
变量引用module.exports
,默认情况下它等于空对象{}
,您可以通过运行以下树行来证明这一点
console.log(this === module.exports);
module.exports.a = "a";
console.log(this);
和输出应该是
true
{ a: 'a' }
这就是为什么您在第二次调用中得到空对象的原因
但是在模块的函数内部, this
变量引用nodejs的global
变量 ,以证明它可以像下面那样创建一个模块并运行它
global.bar = "baz";
function foo() {
console.log(this === global);
console.log(global.bar);
}
foo();
和输出应该是
true
baz
这就是为什么您在第一个电话中找到正确的对象的原因
javascript中的绑定功能是更改“ this”所指向的上下文。
如果要在echo函数中将“ this”设置为创建的dog对象,则应将dog作为绑定参数。
dog.echo = echo.bind(dog);
在代码行上方,更改echo函数中“ this”指向的内容。 所以现在它将指向狗。
在这两种情况下,回显中的“ this”都指向全局对象。
现在,一旦您提供dog作为要绑定的参数,这里就是结果。 如您所见,第二个console.log的“ this”已更改。 它指向狗的对象。
Javascript应该在浏览器和服务器端(大多数时间)以某种方式运行。 Node建立在javascript之上。 它使用相同的v8引擎来编译javascript代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.