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的时候 需要() 执行的意思