一、call函数封装实现
function call(Fn,obj,...args){
if(obj === undefined || obj === null){
obj = globalThis
}
obj.temp = Fn
let result = obj.temp(...args)
delete obj.temp
return result
}
function add (a,b){
console.log(this)
return a + b + this.c
}
let obj = {
c:2
}
window.c = 3
console.log(call(add,obj,10,20))
console.log(call(add,null,10,20))
二、apply函数封装实现
function apply(Fn,obj,args){
console.log(args)
if(obj === undefined || obj === null){
obj = globalThis
}
obj.temp = Fn
let result = obj.temp(...args)
delete obj.temp
return result
}
<script>
function add (a,b){
console.log(this)
return a + b + this.c
}
let obj = {
c:2
}
window.c = 3
console.log(apply(add,obj,[10,20]))
console.log(apply(add,null,[10,20]))
</script>