this的指向問題

this:指向一個對象,根據不一樣狀況,指向也不一樣

1.默認this指向window(這個全局變量):經過this.object能夠訪問全局的數據
2.在嚴格模式下 'use strict' 函數內function(){console.log(this)} 中this未undefined;app

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

console.log(this)

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

/當this爲對象內的方法,而且是通常的function()/
var people ={
name:'xmj',
show:function(){code

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={io

num:2,

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

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

/對於有明確指向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,....)

相關文章
相關標籤/搜索