封装
// 函数 对象 实参[数组]
function apply(fn, obj, args) {
// 如果这个函数处于非严格模式下
// 如果对象为 null 或 undefined 时会自动替换为指向全局对象(globalThis)
if (obj === undefined || obj === null) {
// 指向全局对象
obj = globalThis
}
// 添加临时方法
obj.temp = fn
//调用方法 使用扩展运算符 展开数组中的数据
const result = obj.temp(...args)
// 删除方法
delete obj.temp
return result
}
调用
<script>
function add(a, b) {
console.log(this)
return a + b + this.c
}
var obj = {
c: 50
}
window.c = 100
console.log(apply(add, obj, [10, 20]))
console.log(apply(add, null, [10, 20]))
console.log(apply(add, undefined, [10, 20]))
</script>