JS修改词法作用域的方法

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,'聪慧一中','七年级')();

注:这三种方法并不能修改箭头函数的执行上下文(词法作用域)

原文地址:https://www.cnblogs.com/ggymx/p/12564989.html