javascript call 函數詳解,javascript函數詳解
call 主要應用於function 對象,要求javascript 必須是5.5 以上的。
作用是:調用一個對象的一個方法,以另一個對象替換當前對象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
參數
thisObj
可選項。將被用作當前對象的對象。
arg1, arg2, , argN
可選項。將被傳遞方法參數序列。
說明
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj 指定的新對象。
如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。
obj1.method1.call(obj2,argument1,argument2)
如上,call的作用就是把obj1的方法放到obj2上使用,後面的argument1..這些做為參數傳入.
下面我們舉幾個例子介紹以下:
function a(x,y){alert(x+y); } function b(x,y){ alert(x*y); } a.call(b,3,4)
如上:這個例子就是a 代替 b ,a.call(b,3,4)==a(3,4); //注意js 中函數是對象,函數名是對象的引用。
再看一個例子:所
function class1(){ this.name="class1"; this.showNam=function(){ alert(this.name); } } function class2(){ this.name="class2"; } var c1=new class1(); var c2=new class2(); c1.showNam.call(c2);
上面的意思是把c1的方法放到c2 執行,原本c2 沒有showNam方法,通過call 那麼c2 也就有了call 的方法。所以結果是alert(class2);
call 實現繼承,例子如下:
function class1(){this.showTxt=function(txt){ alert(txt);} } function class2(){ class1.call(this); } var c2=new class2(); c2.showTxt("cc");
這樣 class2 就繼承了class1,class1.call(this),就是把class1 對象代替 this 對象,那麼 class2 不就有 c1所有屬性和方法嗎?c2 對象就能夠直接調用Class1 的方法以及屬性了,執行結果就是:alert(“cc”);
其實call 還可以實現多重繼承:
function class10(){this.showsub=function(a,b){ alert(a-b); } } function class11(){this.showadd=function(a,b){ alert(a+b);} } function class2(){ class10.call(this); class11.call(this); } var a=new class2(); a.showsub(3,4); a.showadd(4,5);
這樣就實現了雙重繼承。