JS高階,解釋this古怪行為

2022-07-24 18:12:13 字數 1092 閱讀 6047

douglas crockford大師把this古怪的行為解釋為和函式的呼叫模式有關。js中有

1)方法模式:簡單的說就是使用點表示式或是下標表示式來呼叫 這裡定然是有物件的 這種情況下 this的繫結發生在呼叫的時候 綁的自然是調它的那個物件了。

作為方法呼叫的函式有乙個非常重要的屬性:在方法體中,用來呼叫方法的物件成為關鍵字this的值

2)函式模式:這個就更簡單了,函式名加呼叫運算子('()')。不過要小心,這個this綁的可是全域性物件,不管你寫哪了。(可以理解成  你不給我指明了   我就自己給它加個全域性物件)

當乙個函式作為函式呼叫而不是方法呼叫時,這個this關鍵字引用全域性物件。容易混淆的是,當乙個巢狀的函式(作為函式)在乙個包含的函式中呼叫,而這個

包含的函式是作為方法呼叫的,這也是成立的:this關鍵字在包含的函式中有乙個值,但是它卻(不太直觀地)引用巢狀的函式體的內部的全域性物件。

看個例子吧

var a = 'global';

var obj =

alert(this.a);//local

test1();}};

obj.test();

/*****************************解決這個問題的方法*****************************/

var a = 'global';

var obj =

alert(this.a);//local

test1();}};

obj.test();

3)構造器呼叫模式  一句話就是用new來呼叫的  new的時候this就繫結到新物件上了  比較好理解

(1)new運算子後面必須跟著乙個函式呼叫。new建立了乙個新的沒有任何屬性的物件,然後呼叫該建構函式,把新的物件作為this關鍵字的值傳遞。

(2)建構函式通常沒有返回值。它們初始化作為this的值來傳遞的物件,並且沒有返回值。但乙個構造是允許返回乙個物件值,並且如果它這麼做,返回的物件成為new表示式的值。在此情況下,作為this的值的物件會被拋棄。可參考jquery建構函式。

直譯器模式(行為型)

定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。結構 適用場景 uml類圖 下面就是直譯器模式的 實現 expression public inte ce expression nonterminalexpression public class ...

行為型模式 直譯器

給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。直譯器模式 interpreter 是一種針對特定問題設計的一種解決方案。例如,匹配字串的時候,由於匹配條件非常靈活,使得通過 來實現非常不靈活。舉個例子,針對以下的匹配條件 因此,需要一種通用的表示方法...

行為型模式 直譯器

直譯器模式 interpreter 是一種針對特定問題設計的一種解決方案。例如,匹配字串的時候,由於匹配條件非常靈活,使得通過 來實現非常不靈活。舉個例子,針對以下的匹配條件 因此,需要一種通用的表示方法 正規表示式來進行匹配。正規表示式就是乙個字串,但要把正規表示式解析為語法樹,然後再匹配指定的字...