call与apply的作用:
1.改变函数内部this指向
2.实现函数继承
代码演示:
var obj={dividend:2}; function isOdd(num){ var result = num%(this.dividend)===0?"偶数":"奇数"; return (num+“是”+result); } isOdd(8) : 8是奇数//输出结果 isOdd.call(obj,8); 8是偶数//输出结果
第一次执行函数isOdd,this.dividend为undefined,因此num%(this.dividend)执行结果为NaN,NaN不等于0,因此结果为奇数;
但是在第二次利用了isOdd.call
后,isOdd的指向不再是window了,而是指向了call的第一个参数,此时为obj,而函数执行内部的this.dividend
自然就变成了2,最终完成函数的执行,输出结果 8 位偶数。
call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。
方法定义
applyFunction.apply(obj,args)
方法能接收两个参数:
obj:这个对象将代替Function类里this对象
args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。
call
call方法与apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表