js中的this

函數調用方式:

1作爲函數

2作爲方法

3作爲構造函數

4通過call()和apply()間接調用


函數調用:使用調用表達式可以進行普通的函數調用也可以進行方法調用。若函數表達式是一個屬性訪問表達式,即該函數是一個對象的屬性或數組中的一個元素,那麼他就是一個方法調用表達式。

普通調用表達式:

foo({x:1});

var total=aaa(0,1,2)+bbb(4,5,6);

var  ccc=ddd(5)/ddd(6);

對於普通函數調用,函數返回值成爲調用表達式的值。若該函數返回是因爲解析器到達結尾,返回值就是undefined。若函數返回是因爲執行一條return語句,返回值就是return之後的表達式的值。若return語句沒有值,則返回undefined。

方法調用:

一個方法無非是個保存在J一個對象的屬性裏的avaScript函數。若有一個函數f和一個對象o,則可用以下代碼給o定義一個m()的方法:

o.m=f;//給o對象定義了一個方法m();

調用時:o.m();

方法調用和函數調用的區別:調用上下文不同。屬性訪問表達式由兩部分組成:一個對象和屬性名稱。在這樣的方法調用表達式裏,對象成爲調用上下文。函數體可以使用關鍵字this引用該對象。

this:this關鍵字沒有作用域的限制。嵌套的函數不會從調用它的函數中繼承this。若嵌套函數作爲方法調用,其this值指向調用它的對象。若嵌套函數作爲函數調用,其this值不是全局對象(非嚴格模式)就是undefined(嚴格模式)。注意:調用嵌套函數時,this不會指向調用嵌套函數外層函數的上下文。若想訪問這個外部函數的this值,需要將this值保存在一個變量裏,這個變量和內部函數同在一個作用域。

構造函數調用:

若函數或者方法前面帶有關鍵字new,它就構成構造函數調用。JavaScript構造函數調用語法允許實參列表和()。

eg:var o=new Object();與var o=new Object;等價。

構造函數將創建一個新對象。這個對象繼承自構造函數的prototype屬性。構造函數試圖初始化這個新創建的對象。並將這個對象用作其調用山下文。因此,構造函數可以使用this關鍵字引用這個新創建的對象。注意:儘管構造函數看起來像一個方法調用,它依然會使用這個新對象作爲調用上下文,即:在表達式new o.m()中,調用上下文並不是o。

間接調用:call()和apply()方法。



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