js简单理解call(),apply(),bind()和this

//A.func.call(B,x,y) 用B对象调用A对象的func方法并传入x,y进func中后立即执行
//用B对象调用A对象的func方法可以简单理解为在B的环境中执行func方法>> B.func(x,y)
//A.func.apply(B,[x,y]) 和call一样只不过传入调用函数的参数要求是数组
//A.func.bind(B,x,y) bind返回的是一个绑定完this的函数
let obj = {
	name: 'hello',
	func: function(m,n){
		console.log(this.name,'m:',m,'n',n)
	}
};
let obj2 = {
	name: 'world'
};
let obj3 = {
	name: '我是a',
	b: {
		name: '我是b',
		f: function(){
			console.log(this.name);
		}
	}
};

obj.func(1,2); //hello m: 1 n: 2
obj.func.call(obj2,3,4); //world m: 3 n: 4
obj.func.call(obj2,[3,4]); //world m: [3, 4] n: undefined
obj.func.apply(obj2,[3,4]); //world m: 3 n: 4
obj.func.apply(obj2,3,4); //报错
let t = obj.func.bind(obj2,1,2);
t();//world m: 1 n: 2
//this的指向在函数定义的时候是确定不了的,
//实际上this的最终指向的是那个调用它的对象,例如 A.B.func() this指向的是B环境 
obj3.b.f(); //我是b
//bind可以类比这个简单理解,因为已经绑定了所以返回的是B.func
//在别的地方调用比如window就是window.B.func()
//再比如经典的题型 obj.f.bind(A).bind(B).bind(c)
//可以简单看成C.B.A.f最终this指向的是最先绑定的A

欢迎大家来讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值