略談javascript中的this
按照周愛明對語言分類的理論,javascript既有命令式語言中的面向對象特性,又有說明式語言中的函數式特性。這些特性交織在一起往往容易把人繞暈。所以,為了提高js水平,頭腦中javascript的這些特性一定要條例清晰。今天先來看看貌似簡單的this。
this是面向對象編程中一個非常重要的特性。在傳統面向對象語言(如java)中,this的作用一般是調用本類中的屬性、方法或表示當前對象。而javascript中的this的值則取決于函數調用的模式。(注:在函數調用時,函數除了聲明時定義的形式參數外每個函數還接收兩個附加的參數this和arguments)。
方法調用模式:this被綁定到該對象
函數調用模式:this被綁定到全局對象。這是語言設計上的一個錯誤。倘若語言設計正確,當內部函數被調用時,this應該仍然綁定到外部函數的this變量。這個設計錯誤的后果是方法不能利用內部函數來幫助它工作,因為內部函數的this被綁定了錯誤值,所以不能共享該方法對對象的訪問權。解決方案:在該方法中定義一個變量并給它賦值為this,那么內部函數就可以通過那個變量訪問到this。
構造器調用模式:如果在一個函數前面帶上new來調用,那么將創建一個隱藏連接到該函數的prototype成員的新對象,同時this將被綁定到那個新對象上。
apply調用模式:apply方法接收兩個參數,第一個將被綁定給this的值。第二個就是一個參數數組。
浙公網安備 33010602011771號