jQuery и prototype не работают вместе с Array.prototype.reverse

#javascript #jquery #prototypejs #javascript-framework #conflict

#javascript #jquery #prototypejs #javascript-фреймворк #конфликт

Вопрос:

Я использую prototype.js и jquery вместе, и я получаю это сообщение об ошибке

Uncaught TypeError: Object [object Object] has no method '_reverse' (Chrome)

Я вызывал jQuery.noConflict раньше

Я использую jQuery.fn.reverse = [].reverse; для того, чтобы иметь обратную функцию в коллекции jQuery

Комментарии:

1. Зачем вам использовать prototype, если у вас уже есть jQuery?

2. Я использую typo3 на этом сайте, и расширение зависит от prototype

Ответ №1:

Если вы используете jQuery в режиме без конфликтов, вам придется добавить функцию reverse в

 jQuery.fn.reverse
  

Комментарии:

1. спасибо за ответ, но я хотел ответить на вопрос для себя 🙂 Просто проверяю, прав ли я

2. Вы правы, но проблема не в этом. $.fn вызывается внутри функционального блока с локальной $ переменной. Однако я изменю свой вопрос

Ответ №2:

prototype перезаписывает собственную Array.protoype.reverse функцию и сохраняет оригинал в Array.prototype._reverse .

Этот фрагмент учитывает это

 if (typeof []._reverse == 'undefined') {
    $.fn.reverse = Array.prototype.reverse;
} else {
    $.fn.reverse = Array.prototype._reverse;
}
  

старое неправильное решение

 // for compatibility with prototype.js
if (![]._reverse) {
  []._reverse = [].reverse;
}
jQuery.fn.reverse = [].reverse;