call()和apply()的作用都是一样的——通过改变函数体内部 this 的指向,借用对象的方法的目的
还是举个栗子吧:
function Cat(){ this.food = ‘fish‘; this.say= function(){ console.log(‘I love ‘ + this.food) } } //小猫构造函数 var keke = new Cat(); //一只小猫,由小猫构造函数创建 var diandian = {food:‘bone‘}; //又来一只小狗
//小猫和小狗一起去餐厅吃饭
keke.say(); //I love fish
//小狗没有say 方法,但是他也想说自己喜欢的食物,于是 keke.say.call(diandian); //I love bone借用小猫的方法。两人一起愉快地吃自己喜欢的食物了。
这两个方法的区别在于参数,call()传递给函数的参数必须列举出来,apply()传递的是参数数组.