<script>
// call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
// 语法:执行fn,使this为obj,并将后面的n个参数传给fn
// 功能等同于函数对象的call方法
function add(a,b){
console.log(this)
return a+b+this.c
}
window.c=10;
const obj={
c:20
}
function call(fn,obj,...args){
// 如果上下文对象没有就指向全局对象window
if(obj===null||obj===undefined){
obj=globalThis
}
//临时增加一个属性,值为要调用的函数,核心代码
obj.temp=fn
// 这里的this指向了obj,参数可能是多个,所以用扩展运算符
const result=obj.temp(...args)
// 删除临时属性
delete obj.temp
// 把值返回出去
return result
}
console.log(add(20,20))
// 指向obj
let a=call(add,obj,20,20)
// 指向window let b=call(add,null,20,20) console.log(a) // 总结:通过举例子,可以化抽象为形象,有助于理解.