JavaScript中call和apply的区别
本文由 liuxianan 发表于 2016-09-23 浏览(276) 下载md
最后修改 2016-10-09 标签:javascript call apply 区别

区别

二者的作用都是在指定this值和参数的情况下调用某个函数,它们 唯一区别 就是参数指定的形式不一样,call接收的是参数列表,apply接收的是数组。

语法:

fun.call(thisArg[, arg1[, arg2[, ...]]]);
fun.apply(thisArg[, argsArray]);

使用

var obj =
{
	str: 'abc',
	foo: function(a, b){ console.log(this.str, a, b); }
};
var fn = obj.foo;
obj.foo(1, 2); // 输出abc 1 2
fn(1, 2); //  // 输出undefined 1 2,由于是直接执行,this变成了window,所以this.str变成了undefined
fn.call(obj, 1, 2); // 输出abc 1 2
fn.apply(obj, [1, 2]); // 输出abc 1 2