为什么需要绑定通过同一对象调用的阴影函数?



当我遇到这个时,正在对Array.prototype做一些肮脏的事情:

Array.prototype.hook_pop = function(callback) {
var base_pop = this.pop.bind(this);  //<-- this works
var base_pop = this.pop;             //<-- this doesn't work
this.pop = function() {
var ret = base_pop();
callback(ret, this);
return ret;
}
}

最初我尝试使用非工作选项,但收到错误"未捕获的类型错误:无法将未定义或 null 转换为对象"。

我理解它的方式,除非另有绑定,否则"this"应该指向调用方法的对象,在本例中为数组实例。但是,当对同一对象调用时,无论哪种方式,"this"在传递给 pop 函数时都应该是相同的,无论它是否绑定。为什么第二个选项不起作用?

var ret = base_pop();

在这一行中,您调用的是base_pop()本身,而不是作为任何对象的方法。因此,未设置其this值。

最新更新