0
点赞
收藏
分享

微信扫一扫

call()方法

<script>
//先演示如何使用call函数
//call函数会自动调用
function Father() {
console.log(this.name);
}

let son = {
name: '海绵宝宝'
}
Father.call(son) //海绵宝宝


// 封装call函数
/*原理:当一个add函数想使用obj对象中的name属性时,此时就先在obj对象中创建一个add函数,此时add函数的this就指向了obj对象,就可以使用obj对象中的属性了*/
//参数:函数,对象,参数列表
function call(Fn, obj, ...args) {
if (obj == null || obj == undefined) {
// 当对象为null或undefined时将this指向全局
obj = globalThis;
}
//暂时将函数添加到对象中
obj.temp = Fn;
console.log(...args);
//调用函数,将参数传给函数,此时函数返回的内容就赋值给了result
let result = obj.temp(...args);
//将暂时添加给对象的函数删除
delete obj.temp;
//函数的返回值
return result;
}

function add(a, b) {
return a + b + this.c
}
let obj = {
c: 520,
}
window.c = 1314;
console.log(call(add, obj, 10, 20)); //550
console.log(call(add, null, 15, 50)); //1379
</script>

举报

相关推荐

0 条评论