1
  this:指向一个对象,根据不同情况,指向也不同

1.默认this指向window(这个全局变量):通过this.object可以访问全局的数据
2.在严格模式下 'use strict' 函数内function(){console.log(this)} 中this未undefined;

var people ={
name:'xmj',
console:()=>{console.log(this)},//this =window
show:function(){

     console.log(this)

}
}
// people.console();
// people.show();//this=people;

/当this为对象内的方法,并且是一般的function()/
var people ={
name:'xmj',
show:function(){

     console.log(this)//this指向这个实例化的对象people,this.name ='xmj';

}
}

//this:找到最近的实例化对象
var num =1;
function Num(){
var num =2;
return this.num;//this=window,因为Num只是一个模板不是实例化,this.num=1;
}

//将this指向内部:定义一个实例让其指向这个实例 eg:
var Num1={

num:2,

Num:function(){ console.log(this.num)}//this =Num1 ,已经实例化的Num1
}
/function 和()=>中this的指向**/
var num2 =1;
var Num2={

num2:2,
 //用普通函数function定义时指向这个对象Num2
 //Num2:funtion(){console.log(this)}//this =Num2

 //当用箭头函数()=>定义指向上下文最近的对象的父this,只能通过继承其他的this,最近并没有this eg:
 Num1:()=>{
        console.log(this);//this =window,上下文中只有Num2这个绑定了对象,这个对象Num2的父this为window
 }

}
Num2.Num1();

/对于有明确指向function的this可以通过apply call bind来更改this的指向/

var obj={
a:'1',
b:'2',
};
function Add(index){
console.log(this.a);// this指向实例化对象 obj; this.a ='1';
this.a =index;
console.log(this.a) //更改this.a的值,this.a='3'
}
Add.apply(obj,['3']);//其中apply的参数是[data1,data2,data3],而call参数是call(obj,data1,data2,....)


XuMingJie
1 声望5 粉丝