一开需要手动实现的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对象添加了一个方法--执行这个方法--去除这个方法