標籤:預設 17.1 函數調用 col 建構函式 全域對象 bsp 通過 oba
劉志祥
時間:2017.11.10
參考:阮一峰的官方網站
this 是javaScript中的一個關鍵字,只能在函數內使用。隨著場合的不同,this的值會發生變化。
1. 單純的全域函數調用,此時this指向window對象
function test1(){ this.x = 1; alert(this.x);}test2(); // 1
var x = 1;function test2(){ alert(this.x);}test2(); // 1
var x = 1;function test3(){ this.x = 0;}test3();alert(x); //0
第一個就代表window調用test1();第二個函數證明this指向全域對象Global;第三個執行test3()後,改變了全域變數x,所以證明this指向window。
2.一個對象調用此函數
function test(){ alert(this.x); } var o = {}; o.x = 1; o.m = test; o.m(); // 1
對象調用此函數,this此時指向改對象。
3. 建構函式調用
function test(){ this.x = 1;}var o = new test();alert(o.x); // 1
通過test() new出一個新對象後,此時this就指向這個新對象。並且此時this不是全域的,只是指向了這個新new出的對象。不會對外面有什麼影響。
4.apply調用
apply()是函數對象的一個方法,它的作用是改變函數的調用對象,它的第一個參數就表示改變後的調用這個函數的對象。因此,this指的就是這第一個參數。
var x = 0;function test(){ alert(this.x);}var o={};o.x = 1;o.m = test;o.m.apply(); //0
o.m.apply(o); //1
apply()裡面為空白的話,預設全域調用此函數,this指向全域window,所以輸出全域的0;
apply(o)改變了調用此方法的對象,此時this指向了o對象,輸出1。
javascript的this多種情境用法