我是 JavaScript 新手,我需要一些帮助来了解 this 关键字在 JavaScript 中的工作原理。当我运行以下代码时,结果是 2,这是显而易见的。
function foo() {
console.log( this.a );
}
var obj = {
a: 2,
foo: foo
};
var a = 'global a';
obj.foo(); // 2
但是如果我运行以下代码,然后打印全局 a 而不是 obj.a。
function foo(){
console.log(this.a);
}
var obj = {
a:2,
foo:foo
}
var bar = obj.foo;
var a = 'global a';
bar();
请有人告诉我为什么要打印全局 a?
最佳答案
在第一个示例中,当您调用函数 foo
时关于变量 obj
, this
的上下文是obj
本身。这就是为什么a == 2
。现在,当您引用函数foo
时到变量bar
, this
的上下文是全局window
,以及变量 a
在这种情况下是global a
。在本例中,要使函数foo
行为方式与第一个示例相同,您可以将其绑定(bind)到 obj
语境。像这样:
function foo(){
console.log(this.a);
}
var obj = {
a:2,
foo:foo
}
// bind the context to obj
var bar = obj.foo.bind(obj);
var a = 'global a';
bar();
我希望我能说清楚......;)
关于javascript - ‘this’ 在 JavaScript 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43963702/