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