obj.call(thisObj, arg1, arg2, ...); obj.apply(thisObj, [arg1, arg2, ...]); 两者作用一致,都是把obj(即this)绑定到thisObj,这时候thisObj具备了obj的属性和方法。或者说thisObj『继承』了obj的属性和方法。
唯一区别是apply接受的是数组参数,call接受的是连续参数。
//动物对象var Animal=function(name){ this.name=name; this.showName=function(){ alert(this.name); }}//猫对象var Cat=function(){ this.name="猫"; Animal.call(this,this.name); //call 必须是 继承对象,非数组}//狗对象var Dog=function(){ Animal.apply(this,["狗"]); //apply 必须是 继承对象,数组}//猪对象var Pig=function(){ this.name="猪";}
测试
$(function(){ var animal=new Animal("动物"); animal.showName(); var cat =new Cat(); cat.showName(); var dog=new Dog(); dog.showName(); var pig=new Pig(); animal.showName.call(pig); //pig 从Animal 对象中继承showName 方法 animal.showName.apply(pig); });
举例2: 三种调用方法是一样的
var person= { print: function(name ,age){ console.log(this.name); console.log(age); } } person.print.call(person,'zhangsan',25); person.print.apply(person,['zhangsan',25]); person.print('zhangsan',25);