关于实现call/apply

288 阅读1分钟

一开需要手动实现的call的功能的时候可能会无从下手不知道怎么做,其实很简单。
如下:

v = 1
function getV(){
    console.log(this.v)
}
let obj = {
    v: 2
}

当我们需要实现getV.call(obj)的功能的时候,实际上可以:

let obj = {
    v: 2,
    getV: function(){
        console.log(this.v)
    }
}
obj.getV()

可以这样写

    Function.prototype.call2 = function(context, ...val){
        context.fn = this
        context.fn(...val) // 参数就不多说了
        delete context.fn // 最后再把这个变量去除掉
    }
    
    getV.call2(obj) // 2
    // 这就相当于是为obj对象添加了一个方法--执行这个方法--去除这个方法