call,apply原理分析

call 与 apply 的相同点

都是为了改变函数调用时this指向,函数可立即执行

call 与 apply 的不同点

call使用多个参数进行传参,apply只有两个参数,后面参数是一个数组

一、call 使用说明

let obj = {
    gender: '男'
}
function show(name,age) {
    return `我是${name} 今年${age}岁了,是一个${this.gender}生`
}
show.call(obj,'zs',20); //我是zs 今年20岁了,是一个男生
call 原理分析
Function.prototype.newCall = function (obj) {
    obj = obj || window; //obj要挂载对象
    obj.fn = this;  //this指调用newCall的实例函数
    args = [...arguments].slice(1);  //截取第一位以后参数
    const result = obj.fn(...args);  //平铺数组内容
    delete obj.fn;  //删除fn属性
    return result;
}
show.newCall(obj,'ls',30); //我是ls 今年30岁了,是一个男生

二、apply 使用说明

let obj = {
    gender: '男'
}
function show(name,age) {
    return `我是${name} 今年${age}岁了,是一个${this.gender}生`
}
show.apply(obj,['zs',20]); //我是zs 今年20岁了,是一个男生
apply 原理分析
Function.prototype.newApply = function (obj) {
    obj = obj || window; //obj要挂载对象
    obj.fn = this;  //this指调用newCall的实例函数
    let result;
    if (arguments[1]) {
        result = obj.fn(...arguments[1]);  
    } else {
        result = obj.fn();  
    }
    delete obj.fn;  //删除fn属性
    return result;
}
show.newApply(obj,['ls',30]); //我是ls 今年30岁了,是一个男生
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值