call和apply用于在特定作用域中调用函数,简单地说就是改变函数中this指针的指向
语法 | 定义 | 说明 |
---|---|---|
call(thisObj,Object) | 调用一个对象的一个方法,以另一个对象替换当前对象。 | call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj |
apply(thisObj,[argArray]) | 应用某一对象的一个方法,用另一个对象替换当前对象。 | 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数 |
举个例子:
function sayHi(){
return this.name;
}
var obj = {name:"Napoleon"};
var name = "Global";
console.log(sayHi.call(this));// Global
console.log(sayHi.apply(obj));// Napoleon
call 和 apply 可以用于实现继承,在父类function中定义方法,在子类function中定义方法中用到的具体属性、
call 和 apply之间的不同如下:
- 参数不同, apply 传入的是一个参数数组,也就是将多个参数组合成一个参数数组, call 从第二个参数开始依次传入.
- apply 可以直接将当前函数的arguments对象作为apply的第二个参数传入