传递的对象未被视为javascript中函数的第一个参数
当我调用函数addToThis并传入obj时,console.log(a)输出第一个数组索引值,它是1,而不是obj为什么传递的对象未被视为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参数,第二
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,如果函数定义中有ac
,则为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
。你期望发生什么?