JavaScript中的.apply()方法混乱

时间:2019-01-01 11:56:52

标签: javascript functional-programming

是JavaScript的新手,只是在学习如何使用.call()和apply()。到目前为止,我了解到.apply()在给它一个“ this”引用后期望一个数组。因此,在玩一些代码时,我遇到了一个小问题,即.call()可以工作,但.apply()即使将其传递给数组也没有。你能告诉我这个问题吗?谢谢

let obj = {
  arr: [2, 3, 4, 5],
  add: function(array) {
    return array.reduce((a, b) => a + b);
  },
  multiply: function(array) {
    return array.reduce((a, b) => a * b);
  }
}

let answer = function(op, arr) {
  if (op == "add") {
    console.log(this.add(arr));
  } else if (op == "multiply") {
    console.log(this.multiply(arr));
  }
}.apply(obj, "multiply", obj.arr);

//Uncaught TypeError: CreateListFromArrayLike called on non-object at main.js:17

1 个答案:

答案 0 :(得分:0)

Apply需要一个参数数组,只需将参数包装在一个数组中即可:

 .apply(obj, ["multiply", obj.arr])

Function.prototype.apply(thisArg, [argsArray])

  

apply()方法调用具有给定值的函数,并提供作为数组(或类似数组的对象)的参数

     
     

参数

     
      
  • thisArg
      可选的。为调用 this 提供了func的值。请注意,this可能不是该方法看到的实际值:如果该方法是non-strict mode代码中的函数,则nullundefined将被全局对象替换,原始值将被装箱。
  •   
  • argsArray
      可选的。类似于数组的对象,指定应调用 func 的参数,如果不向该函数提供参数,则指定nullundefined。从ECMAScript 5开始,这些参数可以是类似于数组的通用对象,而不是数组。参见以下browser compatibility信息。   返回值部分   使用指定的this值和参数调用函数的结果。
  •   
     

返回值

     

使用指定的this值和参数调用函数的结果。