Прототип JavaScript Framework - Prototype JavaScript Framework
Оригинальный автор (ы) | Сэм Стивенсон |
---|---|
Разработчики) | Основная команда прототипа |
изначальный выпуск | Февраль 2005 г. |
Стабильный выпуск | 1.7.3 / 22 сентября 2015 г. |
Репозиторий | |
Написано в | JavaScript |
Тип | Библиотека JavaScript |
Лицензия | Лицензия MIT |
Интернет сайт | prototypejs |
В Прототип JavaScript Framework это JavaScript рамки создан Сэмом Стивенсоном в феврале 2005 г. как часть фонда Аякс поддержка в Рубин на рельсах. Он реализован как один файл кода JavaScript, обычно называемый prototype.js. Prototype распространяется автономно, но также как часть более крупных проектов, таких как Ruby on Rails, script.aculo.us и Рико. По данным одного опроса, на ноябрь 2015 года Prototype используется 2,2% всех веб-сайтов.[1]
Функции
Prototype предоставляет различные функции для разработки приложений JavaScript. Возможности варьируются от ярлыков программирования до основных функций для работы с XMLHttpRequest.
Prototype также предоставляет библиотечные функции для поддержки классы и объекты на основе классов.[2][3] В JavaScript создание объекта прототип вместо этого: функция создания объекта может иметь прототип свойство, и любой объект, назначенный этому свойству, будет использоваться в качестве прототипа для объектов, созданных с помощью этой функции. Фреймворк Prototype не следует путать с этой функцией языка.
Примеры служебных функций
Функция $ ()
В функция доллара, $ (), может использоваться как сокращение для getElementById функция. Чтобы обратиться к элементу в Объектная модель документа (DOM) HTML page, обычная функция, определяющая элемент:
документ.getElementById("id_of_element").стиль.цвет = "#ffffff";
Функция $ () сокращает код до:
$("id_of_element").setStyle({цвет: '#ffffff'});
Функция $ () также может принимать элемент в качестве параметра и возвращать, как в предыдущем примере, расширенный объект прототипа.
вар domElement = документ.getElementById("id_of_element"); // Возвращена обычная ссылка на объектвар prototypeEnhancedDomElement = $(domElement); // Ссылка на расширенный объект прототипа
- Примечание: Как подчеркивание (
_
),$
Символ является допустимым «словесным символом» в идентификаторах JavaScript и не имеет другого значения в языке. Он был добавлен в язык одновременно с поддержкой обычные выражения, таким образом Perl -подобные переменные соответствия могут быть эмулированы, например$`
и$'
.
Функция $ F ()
Опираясь на $()
функция: $ F ()
функция возвращает значение запрошенного элемента формы. Для ввода «текста» функция вернет данные, содержащиеся в элементе. Для элемента ввода 'select' функция вернет текущее выбранное значение.
$ F("id_of_input_element")
Функция $$ ()
В функция доллар доллар является прототипом CSS Селектор двигателя. Он возвращает все совпадающие элементы, следуя тем же правилам, что и селектор в таблице стилей CSS. Например, если вы хотите получить все <a>
элементы с классом "пульсировать", вы должны использовать следующее:
$$("а.пульсат")
Это возвращает коллекцию элементов. Если вы используете script.aculo.us расширение базовой библиотеки Prototype, вы можете применить эффект «пульсации» (мигания) следующим образом:
$$("а.пульсат").каждый(Эффект.Пульсировать);
Объект Ajax
Чтобы уменьшить количество кода, необходимого для запуска кроссбраузерности XMLHttpRequest
функция, Prototype предоставляет Аякс
возразить, чтобы абстрагироваться от различных браузеров. У него есть два основных метода: Ajax.Request ()
и Ajax.Updater ()
.Существуют две формы Аякс
объект. Ajax.Request
возвращает необработанный вывод XML из вызова AJAX, а Ajax.Updater
введет возврат внутрь указанного объекта DOM. Ajax.Request
ниже находит текущие значения двух элементов ввода HTML-формы, отправляет HTTP-запрос POST на сервер с этими парами имя / значение элемента и запускает настраиваемую функцию (называемую showResponse
ниже) при получении HTTP-ответа от сервера:
новый Аякс.Запрос("http: // localhost / server_script", { параметры: { значение1: $ F("form_element_id_1"), значение2: $ F("form_element_id_2") }, onSuccess: showResponse, onFailure: showError});
Объектно-ориентированного программирования
Prototype также добавляет поддержку более традиционного объектно-ориентированного программирования. В Class.create ()
используется для создания нового класса. Затем классу присваивается прототип
который действует как образец для экземпляров класса.
вар Первый класс = Учебный класс.Создайте( { // Метод инициализации служит конструктором инициализировать: функция () { это.данные = "Привет, мир"; }});
Расширение другого класса:
Аякс.Запрос = Учебный класс.Создайте( Аякс.Основание, { // Переопределить метод инициализации инициализировать: функция(url, опции) { это.транспорт = Аякс.getTransport(); это.setOptions(опции); это.запрос(url); }, // ... дополнительные методы добавить ...});
Рамочная функция Object.extend (dest, src)
принимает два объекта в качестве параметров и копирует свойства второго объекта в первый, моделируя наследование. Комбинированный объект также возвращается в результате функции. Как и в примере выше, первый параметр обычно создает базовый объект, а второй - анонимный объект, используемый исключительно для определения дополнительных свойств. Объявление всего подкласса происходит в круглых скобках при вызове функции.
Проблемы
В отличие от других библиотек JavaScript, таких как jQuery, Prototype расширяет DOM. Есть планы изменить это в следующей основной версии библиотеки.[4]
В апреле 2010 года блогер Юрий «kangax» Зайцев (из Prototype Core) подробно описал проблемы, которые могут возникнуть из исправление обезьяны новые методы и свойства в объектах, определенных DOM W3C.[4] Эти идеи перекликаются с мыслями, опубликованными в марте 2010 года Yahoo! разработчик Николас Закас[5] Их можно резюмировать следующим образом.[6]
- Проблемы с кроссбраузерностью: объекты хоста не подчиняются правилам, несовместимое поведение IE DOM и т. Д.
- Вероятность коллизии имен
- Накладные расходы на производительность
К 2008 году конкретные проблемы с использованием методов расширения DOM в старых версиях Prototype в сочетании с более новыми версиями текущих браузеров уже документировались.[7] Вместо того, чтобы добавлять новые методы и свойства к уже существующим объектам DOM-хоста, таким как Элемент
, подобно element.hide ()
, решение этих проблем состоит в том, чтобы предоставить объекты-оболочки вокруг этих узловых объектов и реализовать для них новые методы. jQuery
такой объект-оболочка в библиотеке с таким именем.[4]
Сейчас широко ожидается, что большинство этих идей и проблем будут рассмотрены в выпуске Prototype 2.0, но разработчикам прототипов придется научиться работать с измененным синтаксисом, и большая часть существующего кода Prototype устареет.[6]
Смотрите также
- Ajax (программирование)
- Сравнение фреймворков JavaScript
- script.aculo.us
- Mootools JavaScript Framework
- jQuery
Рекомендации
- ^ Использование библиотек JavaScript для веб-сайтов
- ^ «Прототип JavaScript Framework | Определение классов и наследования». prototypejs.org. Получено 5 июн 2020.
- ^ «Детали объектной модели». Веб-документы MDN. Получено 5 июн 2020.
- ^ а б c kangax (5 апреля 2010 г.). "Что не так с расширением DOM". Получено 6 апреля 2010.
- ^ Закас, Николас К. (2 марта 2010 г.). «Поддерживаемый JavaScript: не изменяйте объекты, которыми вы не владеете». Получено 6 апреля 2010.
- ^ а б Алмаер, Дион (6 апреля 2010 г.). «Прототип 2.0 не расширяет DOM». Получено 6 апреля 2010.
- ^ Ресиг, Джон (26 марта 2008 г.). "getElementsByClassName до прототипа 1.6". Получено 6 апреля 2010.
Библиография
- Орчард, Лесли М .; Пехливанян, Ара; Кун, Скотт; Джонс, Харли (31 августа 2009 г.). Профессиональные фреймворки JavaScript: Prototype, YUI, ExtJS, Dojo и MooTools (1-е изд.). Wrox Press. п. 888. ISBN 978-0-470-38459-6.