是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
答案 0 :(得分:0)
Apply需要一个参数数组,只需将参数包装在一个数组中即可:
.apply(obj, ["multiply", obj.arr])
Function.prototype.apply(thisArg, [argsArray])
apply()
方法调用具有给定值的函数,并提供作为数组(或类似数组的对象)的参数。
参数
thisArg
可选的。为调用this
提供了func
的值。请注意,this
可能不是该方法看到的实际值:如果该方法是non-strict mode代码中的函数,则null
和undefined
将被全局对象替换,原始值将被装箱。argsArray
可选的。类似于数组的对象,指定应调用func
的参数,如果不向该函数提供参数,则指定null
或undefined
。从ECMAScript 5开始,这些参数可以是类似于数组的通用对象,而不是数组。参见以下browser compatibility信息。 返回值部分 使用指定的this值和参数调用函数的结果。返回值
使用指定的
this
值和参数调用函数的结果。