標籤:style blog http color io os 使用 java ar
javascript中的call方法使當前對象可以調用另一個對象的方法,即改變this的指向內容
1 var first_object = { 2 num: 42 3 }; 4 var second_object = { 5 num: 24 6 }; 7 function multiply(mult) { 8 return this.num * mult; 9 }10 alert(multiply.call(first_object, 5)); // 210View Code
此時返回的是執行結果,210。可以看到first_object 中的this變成 了當前對象中的first_object中的this。並且first_object擁有當前對象中的所有方法和屬性。
call函數的使用方式為:
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
thisObj
選中對象
arg1,arg2..argN
可選項。將被傳遞方法參數序列。
1 function Class1() 2 { 3 this.name = "class1"; 4 5 this.showNam = function() 6 { 7 alert(this.name); 8 } 9 } 10 11 function Class2() 12 { 13 this.name = "class2"; 14 } 15 16 var c1 = new Class1(); 17 var c2 = new Class2(); 18 19 c1.showNam.call(c2);
call 的意思是把 c1 的方法放到c2上執行,原來c2是沒有showNam() 方法,現在是把c1 的showNam()方法放到 c2 上來執行,所以this.name 應該是 class2,執行的結果就是 :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 中不就有Class1 的所有屬性和方法了嗎,c2 對象就能夠直接調用Class1 的方法以及屬性了,執行結果就是:alert(“cc”);
apply()函數和call()作用是一樣的,只不過apply傳入兩個參數第一個參數和call()中的第一個參數是一樣的,第二個參數是個數組。
javascript中call函數與apply