有人可以解释这里发生了什么吗?
var dog = {
name: "Dogo"
}
var echo = function() {
console.log(this);
}
dog.echo = echo.bind(this);
echo();
dog.echo();
第一个echo()
按预期打印出全局对象。
然而,第二个打印空对象{}
而不是打印的第一个echo()
。为什么呢?
感谢您的帮助。
答案 0 :(得分:3)
nodejs模块this
变量中的主要范围指的是module.exports
,默认情况下它等于空对象{}
,你可以通过运行这些树线
console.log(this === module.exports);
module.exports.a = "a";
console.log(this);
,输出应为
true
{ a: 'a' }
这就是你在第二次调用中获得空对象的原因
但在模块中的一个函数内,this
变量引用了{j}的global
变量,以证明它创建了一个类似下面的模块并运行它
global.bar = "baz";
function foo() {
console.log(this === global);
console.log(global.bar);
}
foo();
,输出应为
true
baz
这就是你在第一次通话中得到正确对象的原因
答案 1 :(得分:0)
javascript中的绑定功能是将上下文更改为" this"指向。
如果你想"这个"在echo函数中你已经创建了dog对象,你应该将dog作为绑定的参数传递。
dog.echo = echo.bind(dog);
上面的代码行,改变"这个"回波函数中的点。所以现在它会指向狗。
在这两种情况下"这个"在echo中指向全局对象。
现在这里结果一旦你提供狗作为绑定的参数。 你可以看到"这个"更改为第二个console.log。它指向了狗的对象。
Javascript应该在浏览器和服务器端以某种方式运行(大多数情况下)。 Node建立在javascript之上。它使用相同的v8引擎来编译javascript代码。