Почему ни один прототип объекта не работает как обратный вызов forEach?
Вместо того, чтобы задавать вопрос, я просто хотел, чтобы это был вызов, но пока не смог найти ответ.
Например, у нас есть массив строк
x = ['a', ' b', ' c ']
и я хочу обрезать все элементы. Я старался apply
а также call
методы, но ни один из них не работал, как ожидалось:
x.forEach(String.prototype.trim.call)
// Uncaught TypeError: undefined is not a function
x.forEach(String.prototype.trim.apply)
// Uncaught TypeError: Function.prototype.apply was called on undefined, which is a undefined and not a function
Что тут происходит? apply
/call
следует взять их первый аргумент для каждой функции, и все, кажется, хорошо.
2 ответа
foo.call()
вызовет функцию, хранящуюся в foo
,
т.е. значение this
внутри call
будет foo
,
Функция, которую вы передаете forEach
вызывается без явного контекста, поэтому значение this
будет объектом по умолчанию (window
в браузере).
window
это не функция, поэтому это ошибки.
Ты можешь использовать bind
создать новую функцию, которая вызывает функцию с определенным контекстом.
Попробуй это,
x = ['a', ' b', ' c ']
x.map(function(item) { return item.trim() })