每一个函数都包含着两个非继承而来的方法:call 和 apply。
相同点
call 和 apply 方法的作用都是一样的,用来重新定义函数的 this 对象,设置函数体内 this 对象的值,以扩充函数赖以运行的作用域,两者返回的是执行结果。
一般来说,this总是指向调用某个方法的对象,但是使用 call 和 apply 方法时,就会改变 this 的指向。
使用示例:
无参数
var name = 'hhhqzh', age = 18 ; // 永远18!!!!
var obj = {
name: 'Bonnie',
age: this.age,
myFun: function() {
console.log( this.name + "年龄" + this.age );
}
}
var db = {
name: '啊啊啊',
age: 1
}
obj.myFun.call(db); // 啊啊啊年龄1
obj.myFun.apply(db); // 啊啊啊年龄1
有参数
var name = 'hhhqzh', age = 18 ; // 永远18!!!!
var obj = {
name: 'Bonnie',
age: this.age,
myFun: function(from, to) {
console.log( this.name + "年龄" + this.age, from + "去" + to);
}
}
var db = {
name: '啊啊啊',
age: 1
}
obj.myFun.call(db,'潮州','广州'); // 啊啊啊年龄1 潮州去往广州
obj.myFun.apply(db,['潮州','广州']); // 啊啊啊年龄1 潮州去往广州
不同点
- call 和 apply 的区别在于个参数的不同。
call 方法包括多个参数,第一个参数是函数运行的作用域(this),其他参数(传递给函数的参数)一一列举。
apply 方法包括两个参数,第一个与 call 方法相同,第二个参数是传递参数的数组。