代码之家  ›  专栏  ›  技术社区  ›  user81993

为什么需要绑定通过同一对象调用的隐藏函数?[副本]

  •  0
  • user81993  · 技术社区  · 8 年前

    我在对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;
        }
    }
    

    最初,我尝试使用非工作选项,但得到了一个错误“uncaught typeerror:cannot convert undefined or null to object”。

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

    1 回复  |  直到 8 年前
        1
  •  0
  •   Máté Safranka    8 年前
    var ret = base_pop();
    

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