this的含義
由於JavaScript 有運行期綁定的特性,JavaScript 中的 this 含義不是固定的,它可以是全局對象、當前對象或者任意其他對象,這完全取決於函數的調用方式。
隨着函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this指的是,調用函數的那個對象。
(1)在函數被直接調用時,this綁定到全局對象。在瀏覽器中,window 就是該全局對象。
(2)函數作爲構造函數被調用,就是通過這個函數new一個新對象。這時this就指這個新的對象。
<script>
function F1(){
var name = "GD";
console.log("測試:"+this.name);
}
function Test(){
//函數直接被調用
//this = window,this.name="",因爲沒有給window指定name啊;
F1();
//函數作爲構造函數被調用
//this = object,this.name = "",因爲var定義的name變量和this.name不是同一個變量,只是名稱相同而已;
var f = new F1();
}
</script>
(3)函數作爲內部函數被調用,this不是其父函數,仍然是全局變量。
<script>
function F1(){
console.log("測試1:"+this);
function innerTest(){
console.log("測試2:"+this);
}
return innerTest;
}
function Test(){
var inner = F1();
//內部函數innerTest裏面的this = window
inner();
}
</script>
(4)函數作爲某對象的方法被調用,裏面的this指當前對象。在 JavaScript 中函數也是對象。因此函數可以作爲一個對象的屬性。
<script>
function Test(){
var obj1 = {
name: 'Byron',
fn : function(){
console.log(this);
}
};
//函數作爲對象方法,裏面的this = 當前對象
obj1.fn();
//函數作爲對象方法,如果單獨調用,裏面的this = window
var fn2 = obj1.fn;
fn2();
}
</script>
總而言之,隨着函數使用場合的不同,this的值會發生變化。但是有一個總的原則,那就是this指的是,調用函數的那個對象。