JavaScript中this關鍵字的深入分析

this關鍵字的定義

this是Javascript語言的一個關鍵字。

普通定義:當前發生事件的對象。

通俗定義:當前的方法屬於誰。

全局作用域中的this

console.log(this); // Window全局對象

在瀏覽器中執行,將會得到一個全局的Window對象。

在瀏覽器中執行,將會得到一個全局的Window對象。

1、純粹的函數直接調用

var x = 1;function test(){
 this.x = 0;}test();alert(x); //0

this作爲全局對象Global調用,屬於全局通用性。

2、作爲對象的方法調用

function test(){
 alert(this.x);}var o = {}; //聲明一個對象o.x = 1; //給對象添加一個屬性o.m = test; //給對象添加一個方法o.m(); // 1 調用方法,結果爲1

當函數作爲對象的方法被調用時,this指向當前調用該方法的對象。

3、作爲構造函數調用

var x = 2;function test(){
 this.x = 1;}var o = new test();alert(o.x); //1alert(x); //2

全局對象中的屬性x並沒有被改變,此時this指向該構造函數創建的對象。

4、apply、call、bind調用

var x = 0;function test(){
 alert(this.x);}var o = {}; //聲明一個對象o.x = 1; //給對象添加一個屬性o.m = test; //給對象添加一個方法o.m.apply(); //0o.m.apply(o); //1o.m.call(); //0o.m.call(o); //1

call和apply都是Function對象的方法,都可以用來動態改變this的指向,達成函數複用的目的。

兩個方法的第一個參數就是this,不傳參數默認爲全局對象,傳入參數表示當前傳入的對象。

注意:兩種調用方式產生的結果完全相同。如果你已經有一個數組,使用apply方法,只有一個單獨的變量,則用call方法。

嵌套函數作用域中的this

var a = 1;function test(){
 console.log(this.a); // 2
 var self = this;
 function test2(){
  console.log(self.a); // 2
 }
 test2();}var o = {}; //聲明一個對象o.a = 2; //給對象添加一個屬性o.m = test; //給對象添加一個方法o.m();

嵌套函數中,爲了防止this作用域的混亂使用,通常自定義一個變量用於存儲this,然後在嵌套函數內部使用這個變量,如代碼中的self。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章