模拟call、apply、bind

Function.prototype.mycall=function(context,...args){
    context=context||null;
    context.fn=this;//this就是当前函数
    let res=context.fn(...args);//以context为调用对象
    delete context.fn;
    return res;
}

Function.prototype.myapply=function(context,args){
    context=context||null;
    context.fn=this;//this就是当前函数
    let res=context.fn(...args);//以context为调用对象
    delete context.fn;
    return res;
}

Function.prototype.mybind=function(context,...args){
    context=context||null;
    let fn=this;//this就是当前函数
	let fbind=function(...arg_s){
		//如果是用函数来new一个对象
		if(this instance of fn)return fn.call(context,...args,...arg_s)
		//经测试,如果不加以判断的话,this无法指向对象,很容易写乱全局
		//如果是正常环境下执行函数
		return fn.call(this,...args,...arg_s)
	}
	let fp=function(){};
	fp.prototype=this.prototype;
	fbind.prototype=new fp();
	return fbind;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值