Javascript 为什么将函数引用包装到匿名函数中可以纠正';这';指向?
为什么将函数引用包装到匿名函数中可以更正“this”指向Javascript 为什么将函数引用包装到匿名函数中可以纠正';这';指向?,javascript,scope,Javascript,Scope,为什么将函数引用包装到匿名函数中可以更正“this”指向 var logger = { x: 0, updateCount: function () { this.x++; console.log( this.x ); console.log( "Now I'm pointing to : " + this ); } } 当我这样打电话的时候 btn.addEventListener('click', logger.updateCount ); // ma
var logger = {
x: 0,
updateCount: function () {
this.x++;
console.log( this.x );
console.log( "Now I'm pointing to : " + this );
}
}
当我这样打电话的时候
btn.addEventListener('click', logger.updateCount );
// may work like below
function cb() {
console.log(this);
}
addEventListener('click', cb) {
// this --> DOM element
cb(); //=> console.log(this) --> DOM element
}
但是,当我在匿名函数中包装logger.updateCount时,是否可以更正“this”
btn.addEventListener('click', function (e) {
logger.updateCount(); //=> this -- point to 'logger' object
});
为什么 只要“想象”一下它在btn.addEventListener
内部的样子,可能会像:
function addEventListener( eventString, callback ) {
// check the event
// if all is good
// set up an event object
// call back
callback(eventObject);
}
由此可以看出,addEventListener
只知道有一个回调函数,但不知道它的this
是否应该是一个特定的对象
JS的工作方式是,假设它在点之前找到某个对象(如第二个示例中的logger.updateCount()
),它将其用作此
,但如果它没有。。。然后您需要将它绑定到一个,如:
btn.addEventListener('click', logger.updateCount.bind(logger) );
(这一点)在JavaScript中是根据调用站点(函数的调用方式)来解决的
logger.updateCount.bind(this)
使用它传递this@murli2308,您应该回答这个问题…绑定this
而不是logger
,当代码在全局上下文中执行时,this
是什么?