【JavaScript29】call和apply
-
概率
- 每个函数都包含两个非继承而来的方法:apply() 和 call()
- call和apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
-
作用
- call() 方法 和 apply() 方法的作用相同:改变this指向
-
区别
- call():第一个参数是this,其余参数都是直接传递给函数,传递时函数必须逐个列举出来
- apply():传递给函数的是参数数组
-
正常的函数调用是无法改变this指向的;通过call或者apply可以改变this指向
function fn(a, b){
console.log(this);
return a + b;
}
var obj = {name: "qiaofu"};
var ret = fn(1, 2); // 这种方式是无法改变this的
console.log(ret);
var ret1 = fn.call(obj, 1, 2); // 动态的调整函数的this指向.
console.log(ret1);
- call与apply不同点,参数传值
function fn(a, b){
console.log(this.name);
return a + b;
}
var obj = {name: "盖伦"};
var ret1 = fn.call(obj, 1, 2);
console.log(ret1);
// apply和call的区别: apply在给函数传递参数的时候. 是一个整体(数组)传递
var ret2 = fn.apply(obj, [1, 2]);
console.log(ret2);