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

时间:2017-03-10 04:21:05

标签: 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));

2 个答案:

答案 0 :(得分:0)

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

使用apply()时,第一个参数是this参数,第二个参数是要传递给函数的参数数组。在您的情况下,a映射到1b映射到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);

希望这会有所帮助。