在JavaScript中this到底指代什麼?

知悉發表於2019-04-08

       大家都知道this在英文中就是指代詞,在英文中this指的是主人公,但是在javascript中就沒有那麼簡單,它在不同的地方會指代不同,總結起來有以下四種情況。

  1. 函式預編譯過程this——>window

 function test(){

 var a= 123; 

function b(){}

 }

 //預編譯

 AO{  

arguments:[1], 

 this:window,

 c:1; 

 a:underfined,

  b:function(){} 

 test(1); 

2. 全域性作用域 this——>window


 3. call/apply可以改變函式執行時this指向 

 function Person(age,name){ 

 <!--this發生改變指向了obj-->

 this.name = name;

 this.age = age;

 } 

 var person = new Person('deng',100);

 var obj = {} Person.call(obj,'cheng',300);

 4. obj.func(); func()裡面this指向obj 

 var obj = {

 a:function(){

 console.log(this.name) 

 <!-- 誰呼叫a,this就代表誰 ,這裡的this就代表obj-->

 },

 name:'abc' ;

obj.a();


 下面這段程式碼就可以很好的檢驗我們自己對於this指代問題有沒有掌握


var name = '222'; 

 var a = { 

 name:"111", 

 say:function(){ 

 console.log(this.name); 

 }

 }

 var fun = a.say;

 fun(); //輸出222 全域性執行

 a.say();  //輸出111 

 var b ={ 

 name:"333",

 say:function(fun){ 

 fun();//222(沒有人呼叫它,那就是預編譯,此時的this指向window) 

 } 

 b.say(a.say); //所以在這裡輸出的是全域性變數222 

 b.say = a.say;

 b.say();//輸出333

 這就是在JavaScript中this指代的四種不同情況。      


相關文章