1.apply()和call()的区别
(1)apply():
Function.apply(obj,args)方法能接收两个参数
1.1obj:这个对象将代替Function类里this对象
1.2args:这个是数组,它将作为参数传给Function
(2)call():
Function.call(obj,[param1[,param2[,…[,paramN]]]])
2.1obj:这个对象将代替Function类里this对象
2.2params:这个是一个参数列表
以下给出一3个例子解释1.1和2.1的意思(来自菜鸟教程)
例1:
var name = '小王,age = 17;
var obj = {
name: '小张',
objAge:this.age,
myFun: funciton() {
console.log(this.name + "年龄" + this.age
}
obj.objAge; // 17
obj.myFun(); // 小张年龄 undefine
例2:
var fav = '流浪';
function show() {
console.log(this.fav)
}
show(); // 流浪
例1会出现undefine,而例2却正常显示的区别,就在于两者的this指向不同,
例1的this指向obj,例2指向的是全局对象window;
而apply和call的第一个参数就是重新定义这个this这个对象,例3如下
例3
var name = '小王,age = 17;
var obj = {
name: '小张',
objAge:this.age,
myFun: funciton() {
console.log(this.name + "年龄" + this.age
}
var a={
name:'光头',
age:100
}
obj.myFun.call(a); //光头年龄100
obj.myFun.apply(a);//光头年龄100
2.2和1.2由例4解释:
var name = '小王,age = 17;
var obj = {
name: '小张',
objAge:this.age,
myFun: funciton(fm,t) {
console.log(this.name + " 年龄 " + this.age + ' 来自 ' + fm + '去往' + t);
}
var a={
name:'光头',
age:100
}
obj.myFun.call(a,['成都','上海']); //光头 年龄 100 来自 成都去往上海
obj.myFun.apply(a,'成都','上海');//光头 年龄 100 来自 成都去往上海
由此可见 call和apply的差别就在于apply后面的参数是一个数组对象,而call是以’,'隔开的字符传入