1. 程式人生 > >前端---js中的call和apply方法用法

前端---js中的call和apply方法用法

最近看到JavaScript中關於call()和apply()方法可以用來呼叫函式的動態呼叫和實現偽繼承兩種功能,今天在這裡給大家詳細介紹一下.

1.call()函式

函式引用.call(呼叫者,引數1,引數2...)

等同於:呼叫者.函式(引數1,引數2...)=函式.call(呼叫者,引數1,引數2)

2.apply()函式

 函式呼叫.apply(呼叫者,[引數1,引數2...])

函式呼叫.call(呼叫者,引數1,引數2...)=函式呼叫.apply(呼叫者,[引數1,引數2...])

 相同點和不同點:

相同之處:

js中每個函式都包含兩個非繼承而來的方法:call()方法和apply()方法.

apply()方法和call()方法的功能基本完全相同,都可以動態呼叫函式.

不同之處:

通過call()呼叫函式時,必須在括號中詳細地列出每個引數.

通過apply()動態地呼叫函式時,需要以陣列形式一次性傳入所有呼叫引數. 

3.使用apply()或call()實現偽繼承:

偽繼承實現的關鍵在於子類構造器需要以this作為呼叫者來呼叫父類構造器,這樣父類構造器中的this就會變成代表子類,子類就可以得到原父類定義的例項屬性和方法,因此這種偽繼承方式完全可以用apply或call來實現,只要在使用apply或call呼叫時指定this作為呼叫者即可.我們在下面寫個例項看看具體效果:

function Person(name,age){
this.name=name;
this.age=age;
}
function Student(name age grade){
Person.call(this,name ,age);
Person.apply(this,[name,age]);
this.grade=grade;
}

    上面程式中以this作為呼叫者呼叫Person的構造器---這種方法即可用apply呼叫實現,也可用call呼叫實現,這行apply呼叫或call呼叫即可代替前面偽繼承實現方式的構造器中兩行粗體字程式碼.