快速掌握javascript的apply()和call()方法

1.什么是apply()和call()

    <1.apply()和call()是函数自带的两个函数二者作用一致

    <2.作用:改变方法中的this。例:say.call(小怪兽),将方法say()中的this指向对象‘小怪兽’

2.什么时候使用apply()和call()

在js面向对象编程中,我们经常这样定义:

function cat() {
}
cat.prototype = {
    food : 'jerry',
    say  : function () {
        console.log('I like '+ this.food);
    }
};
let cat_tom = new cat();
cat_tom.say();             // I like jerry
假如:有一个对象 mouse = {food:'tom'}
我们 不想对它 mouse 重新定义say方法,那么我们可以通过call或apply来使用 cat_tom的say方法,如下:
let mouse = {food:'tom'};
cat_tom.say.call(mouse);     //I like tom
cat_tom.say.apply(mouse);    //I like tom
所以,可以看出call和apply是为了 动态改变this而出现的
当一个object没有某个方法,但是其他的 对象有,我们可以借助call或apply用其它对象的方法来操作。

3.apply()和call()的唯一区别

  • apply()把参数打包成Array再传入;
  • call()把参数按顺序传入。
比如调用Math.max(1, 2, 3),分别用apply()和call()实现如下:
Math.max.apply(null, [1, 2, 3]);  // 3
Math.max.call(null, 1, 2, 3);     // 3



猜你喜欢

转载自blog.csdn.net/yajie_china/article/details/80046898
今日推荐