Почему ни один прототип объекта не работает как обратный вызов 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() })
Другие вопросы по тегам