今天小熙带你们来详细的了解一下js中的call和apply方法。这两个方法基本上是一个意思,区别在于 call 的第二个参数能够是任意类型,而apply的第二个参数必须是数组,也能够是arguments,还有 callee,caller..数组
一、方法定义app
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另外一个对象替换当前对象。
说明:
call 方法能够用来代替另外一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
若是没有提供 thisObj 参数,那么 Global 对象被用做 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另外一个对象替换当前对象。
说明:
若是 argArray 不是一个有效的数组或者不是 arguments 对象,那么将致使一个 TypeError。
若是没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用做 thisObj, 而且没法被传递任何参数。函数
二、经常使用实例ui
animal.showName.call(cat,""); //自动执行弹出Catthis
/这个是说 cat 已经继承了animal的方法了,虽然cat木有showName这个方法,可是经过call,已经把参数都传给了cat,cat直接调用继承到的showName()方法便可 spa
c、实现继承对象
执行过程:继承
首先执行var cat = new Cat("Black Cat");进入function Cat(name){
Animal.call(this, name);
}
这时候的this为Cat{}对象,并不是Animal,再接执行function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
}
此时的this对象绑定为Cat{},所以是Cat对象得到了两个属性为:Cat{name:"Black Cat",showName:function(){
alert(this.name);
}},回到var cat=Cat{name:"Black Cat",showName:function(){
alert(this.name);
}}io
最后才是cat.showName();function
d、多重继承
很简单,使用两个 call 就实现多重继承了。
听完小熙的讲解和贴码,你们是否是对call和apply方法有所了解了呢~~若有不懂,欢迎你们留言哦