封装
function call(fn,obj,...args){
// 如果这个函数处于非严格模式
// 如果对象为 null 或 undefined 时会自动替换为指向全局对象
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: 50
}
window.c = 100
// 改变了this指向
console.log(call(add, obj, 10, 20));
// 对象传递的是null 、 undefined 所以指向全局 window.c
console.log(call(add, null, 10, 20));
console.log(call(add, undefined, 10, 20));
</script>
结果

本文详细解析了JavaScript中的`functioncall(fn,obj,...args)`封装函数,探讨了在对象为null或undefined时如何自动替换为全局对象,并通过实例展示了函数调用中临时方法的使用和删除。
9307

被折叠的 条评论
为什么被折叠?



