本文實例講述了JS中call和apply函數用法。分享給大家供大家參考,具體如下:
call 函數
語法
obj.call(thisObj,arg[,arg2[,arg3[,...agr]]]);
簡介
thisObj繼承obj的屬性和方法(obj原型鏈上的屬性和方法不能被繼承),后面的參數會當成obj的參數安裝順序傳遞進去。
示例
function animal(type,nickname){ this.type = type; this.nickname = nickname; this.sayHello = function(){ return 'hello'; }}function cat(name,type,nickname){ this.name = name; //cat繼承animal animal.call(this,type,nickname);}console.log(new cat('wsscat','cut','tom'));/*cat { name: 'wsscat', type: 'cut', nickname: 'tom', sayHello: [Function] }*/apply 函數
語法
obj.apply(this[,argArray]);
簡介
apply和call的作用差不多,都可以用來繼承,區別在與apply只有兩個參數,第二個參數必須是數組或者arguments對象。否則會報TypeError錯誤。如果繼承的對象obj有多個參數,則會吧argArray的參數依次對應obj的每個參數。
示例
function animal(type,nickname){ this.type = type; this.nickname = nickname; this.syaHello = function(){ return 'hello'; }}function cat(name,type,nickname){ this.name = name; animal.apply(this,arguments);}console.log(new cat('wsscat','cut','tom'));/*cat { name: 'wsscat', type: 'wsscat', nickname: 'cut', syaHello: [Function] }*/總結
call和apply在功能是相同的。
相同點在于都是用于對象的繼承,第一個參數都是thisObj.
不同點在于call可以有多個參數,從第二個參數開始往后的參數會依次傳給被繼承的對象做參數。apply只有兩個參數,第二個參數必須是數組類型或者arguments對象類型,而且他會把數組中的元素依次傳遞給被繼承的對象做參數。
通過以上幾點,我們可以得到如果被繼承的對象只有一個參數的可以使用call,如果被繼承的對象有多個參數的,建議使用apply.
補充
js中可以實現多繼承,只需要調用多次call或apply即可。如:
function animal(type,nickname){ this.type = type; this.nickname = nickname; this.syaHello = function(){ return 'hello'; }}function wscat(name,age){ this.name = name; this.age = age; this.sayMe = function(){ return 'my name:' + this.name + ', age:' + this.age; }}function cat(name,age,type,nickname){ //第一種使用call animal.call(this,type,nickname); wscat.call(this,name,age); //第二種使用apply //animal.apply(this,[type,nickname]); //wscat.apply(this,[name,age]);}console.log(new cat('wscat',2,'cat','tom');/*cat { type: 'cat', nickname: 'tom', syaHello: [Function], name: 'wscat', age: 2, sayMe: [Function] }*/
新聞熱點
疑難解答
圖片精選