自己实现bind,call,apply

let obj = {
	a:3,
	fn:function(str=null){
		console.log(str +' --- '+ this.a)
	}
}
Function.prototype.mybind = function(obj){
	return () =>{
		this.mycall(obj)
	}
}
Function.prototype.mycall = function(obj = (typeof window === 'undefined' ? undefined : window ),...arg){
	if(typeof this !== 'function'){
		throw this + 'is not a function'
	}
	let fn = Symbol('fn')
	obj[fn] = this
	const result = obj[fn](...arg)
	delete obj[fn]
	return result
}

Function.prototype.myapply = function(obj = (typeof window === 'undefined' ? undefined : window ),arg = []){
	if(typeof this !== 'function'){
		throw this + 'is not a function'
	}
	let fn = Symbol('fn')
	obj[fn] = this
	const result = obj[fn](...arg)
	delete obj[fn]
	return result
}
let o1 = {
	a:6,
	b:3,
	fn:function(){
		console.log(this.b)
	}
}
obj.fn.myapply(o1,['myapply'])	// 6
o1.fn()	// 3

obj.fn.mycall(o1,'mycall')	// 6

let test = function (){
	console.log(this.a)
}.mybind(o1)

test.call(obj)		// 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值