传递的对象未被视为javascript中函数的第一个参数

传递的对象未被视为javascript中函数的第一个参数,javascript,Javascript,当我调用函数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)); 见: 使用apply()时,第一个参数是this参数,第二

当我调用函数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));
见:

使用
apply()
时,第一个参数是
this
参数,第二个参数是要传递给函数的参数数组。在您的情况下,
a
映射到
1
b
映射到
2
。如果要添加第三个参数,
c
,它将映射到
3

更简单地说,
apply()
中的第一个参数正是此将在函数中引用的。第二个参数是传递给函数的参数数组

如果要添加
console.log(this)
,您将看到您的对象

var obj={num:2};
var addToThis=函数(a,b){
控制台日志(a);
console.log(this);
返回此.num+a+b;
};
var-arr=[1,2,3];

console.log(addToThis.apply(obj,arr))我将尝试从我所理解的内容来解释它。使用apply的语法为:

fun.apply(thisArg, [argsArray])
这里,thisArg声明将应用于函数的上下文。(例如,这个)。[argsArray]是函数的参数数组

执行此操作时:

addToThis.apply(obj,arr)
基本上是将
arr=[1,2,3]
作为参数传递给addToThis函数。因此,
a
变为1,
b
变为2,如果函数定义中有a
c
,则为3..,依此类推,直到它达到数组的长度

请参见fiddle,这里
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);

希望这有帮助

apply
将数组的内容作为单个参数发送-因此
a
将设置为
1
,而
b
将设置为
2
。你期望发生什么?