当我调用函数addToThis并传入obj时,console.log(a)输出第一个数组索引值为1而不是obj为什么?
var obj = {num:2};
var addToThis = function(a,b){
console.log(a);
return this.num + a + b;
};
var arr = [1,2,3];
console.log(addToThis.apply(obj,arr));
答案 0 :(得分:0)
请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
使用apply()
时,第一个参数是this
参数,第二个参数是要传递给函数的参数数组。在您的情况下,a
映射到1
,b
映射到2
。如果您要添加第三个参数c
,则会将其映射到3
。
更简单地说,apply()
中的第一个参数就是this
在函数中引用的内容。第二个参数是传递给函数的参数数组。
如果你要添加console.log(this)
,你会看到你的对象。
var obj = {num:2};
var addToThis = function(a,b){
console.log(a);
console.log(this);
return this.num + a + b;
};
var arr = [1,2,3];
console.log(addToThis.apply(obj,arr));

答案 1 :(得分:0)
我会尝试从我的理解中解释它。使用apply的语法是:
fun.apply(thisArg, [argsArray])
这里,thisArg陈述了将应用于函数的上下文。 (例如,这)。 [argsArray]是函数的参数数组。
执行此操作时:
addToThis.apply(obj,arr)
您基本上将arr=[1,2,3]
作为addToThis函数的参数传递。因此,a
变为1,b
变为2,如果在函数定义中有c
,则为3 ......依此类推,直到达到数组的长度。
请参阅this小提琴,此处console.log(c)
打印出数组中的第三个元素。但是,如果你写了这段代码:
var obj = {num:2};
var addToThis = function(a,b,c,d){
console.log(a); //prints first element in array
console.log(b); //prints second element
console.log(c); //prints third element
console.log(d); //prints undefined because there is no forth element
};
var arr = [1,2,3];
addToThis.apply(obj,arr);
希望这会有所帮助。