js的call和apply区别

call和apply都是改变了this的指针。

obj.call(newObj, arg1, arg2, ...);
obj.apply(newObj, [arg1, arg2, ...]);

上面的都是把obj的this指向了newObj,这时newObj就继承了obj的属性和方法。

两者区别是接收的参数不同,第一个参数都是函数运行的作用域(this),

apply第二个参数接受的是数组参数,如果没有提供argArray和newObj任何一个参数,那么Global对象将用作newObj。

call接受的是连续参数,如果没有提供newObj参数,那么Global对象被用于newObj。

如下面的例子

        function add(j, k) {
            console.log(j + k);
        }

        function sub(j, k) {
            console.log(j - k);
        }
        add(2, 1); //3
        add.call(sub, 2, 1); //3
        add.apply(sub, [2, 1]); //3

        sub(2, 1); //1
        sub.call(add, 2, 1); //1
        sub.apply(add, [2, 1]); //1
posted @ 2019-02-01 14:36  H柷H  阅读(666)  评论(0编辑  收藏  举报