Я новичок в 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.info(this.add(arr));
} else if (op == "multiply") {
console.info(this.multiply(arr));
}
}.apply(obj, "multiply", obj.arr);//Uncaught TypeError: CreateListFromArrayLike called on non-object at main.js:17
Это хороший вопрос - я не могу сразу понять, что с ним не так.
Итак, все аргументы после установки "this" должны быть массивами или он принимает только два аргумента, включая установку "this"?
Опять же, я знаю, что мой вопрос отмечен как повторяющийся, но вопрос, на который вы мне указываете, очень сложный, поэтому, пожалуйста, подумайте еще раз, спасибо
Только то, что повторяющаяся цель - сложный, не делает ее недублирующей. Важной частью цели дублирования является последний блок кода (где path является строкой, а не массивом). Проблема та же, решение (как показано Джонасом в своем ответе здесь) то же самое.
Хорошо, спасибо @Andreas, в следующий раз буду задавать вопросы получше



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Apply ожидает массив аргументов, просто оберните аргументы в массив:
.apply(obj, ["multiply", obj.arr])
Function.prototype.apply(thisArg, [argsArray])
The
apply()method calls a function with a given this value, and arguments provided as an array (or an array-like object).Parameters
thisArg
Optional. The value ofthisprovided for the call tofunc. Note thatthismay not be the actual value seen by the method: if the method is a function in non-strict mode code,nullandundefinedwill be replaced with the global object, and primitive values will be boxed.argsArray
Optional. An array-like object, specifying the arguments with whichfuncshould be called, ornullorundefinedif no arguments should be provided to the function. Starting with ECMAScript 5 these arguments can be a generic array-like object instead of an array. See below for browser compatibility information. Return valueSection The result of calling the function with the specified this value and arguments.Return value
The result of calling the function with the specified
thisvalue and arguments.
Это не особо полезно.
@dwjohnston не стесняйтесь редактировать эту вики сообщества или проголосовать за повторное открытие
Итак, все аргументы после установки "this" должны быть массивами или он принимает только два аргумента, включая установку "this"? @Jonas
@ofentse второй, он принимает только два аргумента.
Ну ладно, думаю, я подумал, что когда они говорят, что принимает массивы, это означает, что последний аргумент должен быть массивом. Я продолжаю изучать это, очень признателен
Второй аргумент
applyдолжен быть массивом.'multiply'- это строка, а не массив.