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
转载于:https://www.cnblogs.com/huzhuhua/p/10345758.html