自定义call函数
什么是call函数
call() 方法是预定义的 JavaScript 方法。它可以用来调用所有者对象作为参数的方法,通过 call(),您能够使用属于另一个对象的方法。也就是能够改变this的指向,下面是通过一个自定义call()函数来了解其原理
function a(){
console.log(this)
}
var b={
x:1
}
Function.prototype.realizeCall = function (context) {
context = context || window //context=b{}
Object.prototype.fn = this //此时是a在调用函数,故this=a(){} 故context=b{fn:a(){}} 在传入的对象内挂载一个属性fn,将this赋值到fn
let arg = Array.from(arguments).slice(1) //拿后面的参数(去除第一位的函数)
let result = context.fn(...arg) //相当于b.a(){} 用b来执行a(){},a内的this就指向了调用者b
delete Object.prototype.fn
return result
}
a.realizeCall(b)
注:fn挂在Object原型上,不要挂在传入的对象上,原型对象的内容不会显示出来