標籤:
obj.func.call(obj1) //是將obj1看做obj,調用func方法,將第一個參數看做函數調用的對象,可以看做,將obj的方法給obj1使用
ECMAScript規範給所有函數都定義了call()與apply()方法。
注意:call()與apply()的第一個參數都是需要調用的函數對象。
在函數體內this的值就是指向這個調用者,也就是第一個參數,剩餘的參數都是需要傳遞給函數的值
call()與apply()的不同在於,剩餘的參數,call(),剩餘的參數可以是任意的值,而apply()剩餘的值只能是數組。
例如:function add(a,b){
return a+b;
}
function sub(a,b){
return a-b;
}
apply()的用法:
var a1=add.apply(add,[4,2]);
var a2=sub.apply(sub,[4,2]);
call()的用法:
var a1=add.call(add,4,2);
var a2=sub.call(sub,4,2);
Js認為他自己是萬能的,既然進階語言能夠繼承,我JS也可以繼承
function fun1(){
this.a=123;
this.add=function(){
return this.a;
}
function fun2(){
this.a=456;
}
}
var a1=new fun1();
var a2=new fun2();
var a=a1.add.call(a2); //輸出的是456
這裡就是把f1的方法拿給f2來使用,f2便可以使用f1中所有的方法,這不正是進階語言中繼承的概念嗎,而且還可以模仿進階語言中的多繼承
function fun1(){
this.add=function(){
return this.a+this.b;
}
this.fun2=function(){
return this.a-this.b;
}
funtion fun3(){
this.a=10;
thi.b=2;
fun1.call(this);
fun2.call(this);
}
}
var f3=new fun3();
console.log(f3.add()) //13;
console.log(f3.sub()) //8
apply()方法和call()方法