我理解的this指向,call,apply,bind

263 阅读1分钟

1、看过很多资料,总结起来就是,this的指向的问题出现在ES5以下。 以前觉得很不好记忆,理解了就懂了。你这么理解,在ES5以下的标准中谁调用,this就是指向谁。


var name='我是windows';<br>
var a={
    var name='我是小小';
    b:function(){
        this.c();
        console.log(this.name)
    };
    c:function(){
        var name='我是cc';
        console.log(this.name)
    }
}
a.b();

2、call和apply,bind这几个方法的理解。
call和apply的存在的意义是为了改变this的指向。他们两者的区别是call接受的参数是以字符串的形式存在的。而apply的形式是数组

apply(obj,[arg1,arg2,arg3,...]);
call(obj,arg1,arg1,arg3,...);

const name='小a'
const obj1={
    name:'小b',
    age:18,
    func1:function(tall,sex){
        console.log(this.name+'的身高是'+tall+',性别是'+sex);
    }
}
const obj2={
    name:'小c',
    tall:180
}
obj1.func1(160,'女') //小b的身高是160,性别是女
obj1.func1.call(obj2,190,'男') // 小c的身高是190,性别是男   **这个地方通过吧obj2传进去,本来func1是由obj1调用的,那么this.name应该是obj1的name,但是通过call改变了this的指向,this指向的是 call 或者apply,紧跟着的第一个参数**
obj1.func1.apply(obj2,[obj2.tall,'女']) //小c的身高是180,性别是女
同样的也可以使用bind来实现:
obj1.func1.bind(obj2,175,'男')() //小c的身高是175,性别是男
当上述使用bind的时候 需要() 执行的意思