0x00:js中this的四種呼叫模式
1,方法呼叫模式
2,函式呼叫模式
3,構造器呼叫模式
0x01:第一種:方法呼叫模式 (也就是用.呼叫的)this就是這個物件本身
當乙個函式被儲存為物件的乙個屬性時,我們稱它為乙個方法,當乙個方法被呼叫時,this被繫結到該物件,如果乙個呼叫表示式包含乙個屬性表示式(即乙個.點表示式或者[subscript]下標表示式)那麼它被當做乙個方法呼叫.
var
myobject
=
}
myobject
.increment
();
document
.writeln
(myobject
.value
);//1
myobject
.increment(2
);
document
.writen
(myobject
.value
;)
方法可以使用this去訪問物件,所以它能從物件中取得或修改該物件,this到物件的繫結發生在呼叫它的時候,這個超級「遲繫結」(very later binding)使用函式可以對this高度復用,通過this可取得它們所屬物件的上下文的方法稱為公共方法。
0x02:第二種:函式呼叫模式
當函式並非乙個物件的屬性時,那麼它被當做乙個函式來呼叫:
var
sum
=add(3
,4);
當函式以些模式呼叫時,this被繫結到全域性物件,這是語言設計上的乙個錯誤,如果語言設計正確,當內部函式被呼叫時,this應該仍然繫結到外部函式的this物件,這個錯誤設計的後果就是方法不能利用內部函式來幫助它工作,因為內部函式的this被繫結了錯誤的值,所以不能共享該方法對物件的訪問權,有乙個很容易的解決辦法如果該方法定義乙個變數並給它賦值為this,那麼內部函式就可以通過這個變數來訪問到this
//給myobject增加乙個double方法
myobject
.double
=function
()
helper
();以函式的形式來呼叫
helper
}
//以方法的形式來呼叫double
myobject
.double
();
document
.wtiten
(myobject
.getvalue
());
//6
0x03:第三種:構造函式呼叫模式
var
class
=function
()
var
class
=new
class
();
console
.log
(class
.value
);//100
我們通過new關鍵字來呼叫建構函式,此時this會繫結在該新物件上(也就是這個例項物件上)
var
myobject
=;
var
foo
=function
();
foo
();//global
foo.(
myobject
);//
foo
.call
(myobject
);//
var
newfoo
=foo
.bind
(myobject
);
newfoo
();//
四種委託使用方法
public delegate int methoddelegate int x,int y delegate 定義乙個委託 例項化乙個委託物件 methoddelegate methoddelegate new methoddelegate add console.writeline method...
HTML a標籤的四種狀態使用方法
在看網頁源 的時候遇到a link和a visited覺得很有意思,好奇地查了一下相關解釋。根據mdn docs記錄,元素也成為錨元素,可以建立通向其他網頁 檔案 同一頁面內的位置 電子郵件位址或任何其他 url 的超連結。常用href屬性來指示鏈結的目標位址 target屬性用來規定在什麼位置開啟...
JS中this的四種用法
1.在一般函式方法中使用 this 指代全域性物件 functiontest test 1 2.作為物件方法呼叫,this 指代上級物件 function test var o o.x 1 o.m test o.m 1 3.作為構造函式呼叫,this 指代new 出的物件 function test...