1.1.2 this及bind/apply/call相关方法
三者的相似点:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。
三者的不同点:
apply和call,bind的后续参数有区别,bind返回一个函数(它们仅仅是形式不同)
应用形式:
//将func的this指向从A更改为B,使B能通过此种方式调用func方法,但B对象并没有继承A中的func
A.func.apply(B,[arg1,arg2,arg3...])
A.func.call(B,arg1,arg2,arg3...)
A.func.bind(B,arg1,arg2,arg3...)();//call的柯里化实现,实现延迟加载
目的:让一个对象暂时使用另一个对象的方法,从形式上实现多重继承。
例子:
var xw={
name:'小王',
gender:'男',
getInfo:function(school,grade){
console.log(`${this.name}:性别:${this.gender},就读于${school}的${grade}`);
}
};
var xm={
name:'小美',
gender:'女'
};
xw.getInfo('智障二中','八年级');
xw.getInfo.apply(xm,['聪慧一中','七年级']);
xw.getInfo.call(xm,'聪慧一中','七年级');
xw.getInfo.bind(xm,'聪慧一中','七年级')();
注:这三种方法并不能修改箭头函数的执行上下文(词法作用域)