Автор (ы) | Сэм Стивенсон |
---|---|
Разработчик (и) | Prototype Core Команда |
Первый выпуск | Февраль 2005 г.; 15 лет назад (2005-02) |
Стабильный выпуск | 1.7.3 / 22 сентября 2015 г.; 5 лет назад (22.09.2015) |
Репозиторий | |
Написано на | JavaScript |
Тип | JavaScript библиотека |
Лицензия | Лицензия MIT |
Веб-сайт | prototypejs.org |
Prototype JavaScript Framework - это JavaScript framework, созданный Сэмом Стивенсоном в феврале 2005 года как часть основы для поддержки Ajax в Ruby on Rails. Он реализован как отдельный файл кода JavaScript, обычно называемый prototype.js. Prototype распространяется автономно, но также как часть более крупных проектов, таких как Ruby on Rails, script.aculo.us и Rico. Согласно одному опросу, по состоянию на ноябрь 2015 года, Prototype используется 2,2% всех веб-сайтов.
Prototype предоставляет различные функции для разработки приложений JavaScript. Возможности варьируются от программных ярлыков до основных функций для работы с XMLHttpRequest.
. Prototype также предоставляет библиотечные функции для поддержки классов и объектов на основе классов. В JavaScript создание объекта вместо этого основано на прототипе : функция создания объекта может иметь свойство prototype, и любой объект, назначенный этому свойству, будет использоваться в качестве прототипа для созданных объектов. с этой функцией. Фреймворк Prototype не следует путать с этой функцией языка.
долларовая функция, $ (), может использоваться как сокращение для функции getElementById. Чтобы обратиться к элементу в объектной модели документа (DOM) страницы HTML, обычная функция, идентифицирующая элемент:
document.getElementById ("id_of_element"). style.color = "#ffffff";
Функция $ () сокращает код до:
$ ("id_of_element"). SetStyle ({color: '#ffffff'});
Функция $ () также может принимать элемент в качестве параметра и возвращать, как в предыдущем примере, расширенный объект прототипа.
var domElement = document.getElementById ("id_of_element"); // Возвращена обычная ссылка на объект var prototypeEnhancedDomElement = $ (domElement); // Ссылка на расширенный объект прототипа
_
), символ $
является допустимым «символом слова» в идентификаторах JavaScript и не имеет другое значение в языке. Он был добавлен в язык одновременно с поддержкой регулярных выражений, чтобы можно было эмулировать соответствующие Perl -подобные переменные, такие как $ `
и $'
., основанная на функции $ ()
: функция $ F ()
возвращает значение запрошенного элемента формы. Для ввода «текста» функция вернет данные, содержащиеся в элементе. Для элемента ввода 'select' функция вернет текущее выбранное значение.
$ F ("id_of_input_element")
функция доллара - это механизм выбора CSS от Prototype. Он возвращает все совпадающие элементы по тем же правилам, что и селектор в таблице стилей CSS. Например, если вы хотите получить все элементы с классом "pulsate", вы должны использовать следующее:
$$ ("a.pulsate")
Это возвращает коллекцию элементов. Если вы используете расширение script.aculo.us базовой библиотеки Prototype, вы можете применить эффект «пульсации» (мигание) следующим образом:
$$ («a.pulsate»). каждый (Effect.Pulsate);
В целях сокращения объема кода, необходимого для выполнения кроссбраузерной функции XMLHttpRequest
, Prototype предоставляет объект Ajax
для абстрагирования разные браузеры. Он имеет два основных метода: Ajax.Request ()
и Ajax.Updater ()
. Есть две формы объекта Ajax
. Ajax.Request
возвращает необработанный XML-вывод из вызова AJAX, тогда как Ajax.Updater
вводит возврат внутри указанного объекта DOM. Ajax.Request
ниже находит текущие значения двух элементов ввода HTML-формы, отправляет HTTP-запрос POST на сервер с этими парами имя / значение элемента и запускает пользовательскую функцию (называемую showResponse
ниже) при получении ответа HTTP от сервера:
новый Ajax.Request ("http: // localhost / server_script", {параметры: {значение1: $ F ("form_element_id_1"), значение2: $ F ("form_element_id_2")}, onSuccess: showResponse, onFailure: showError});
Prototype также добавляет поддержку более традиционного объектно-ориентированного программирования. Метод Class.create ()
используется для создания нового класса. Затем классу назначается прототип , который действует как образец для экземпляров класса.
var FirstClass = Class.create ({// Метод инициализации служит конструктором initialize: function () {this.data = "Hello World";}});
Расширение другого класса:
Ajax.Request = Class.create (Ajax.Base, {// Переопределить метод инициализации initialize: function (url, options) {this.transport = Ajax.getTransport (); this. setOptions (options); this.request (url);}, //... добавление дополнительных методов...});
Каркасная функция Object.extend (dest, src)
принимает два объекта в качестве параметров и копирует свойства второго объекта в первый, моделируя наследование. Комбинированный объект также возвращается в результате функции. Как и в приведенном выше примере, первый параметр обычно создает базовый объект, а второй - анонимный объект, используемый исключительно для определения дополнительных свойств. Объявление всего подкласса происходит в круглых скобках при вызове функции.
В отличие от других библиотек JavaScript, таких как jQuery, Prototype расширяет DOM. Есть планы изменить это в следующей основной версии библиотеки.
В апреле 2010 года блогер Юрий 'kangax' Зайцев (из Prototype Core) подробно описал проблемы, которые могут возникнуть в результате исправления обезьян. новые методы и свойства в объектах, определенных в модели W3C DOM. Эти идеи перекликаются с мыслями, опубликованными в марте 2010 года Yahoo! разработчик Николас С. Закас Их можно резюмировать следующим образом
К 2008 году конкретные проблемы с использованием методов расширения DOM в старых версиях Prototype в сочетании с более новыми версиями текущих браузеров уже документировались. Вместо добавления новых методов и свойств к уже существующим объектам DOM «хоста», таким как Element
, например element.hide ()
, решение этих проблем заключается в предоставлении объектов-оберток вокруг эти хост-объекты и реализовать на них новые методы. jQuery
- такой объект-оболочка в библиотеке с таким именем.
Сейчас широко ожидается, что большинство этих идей и проблем будут решены в версии Prototype 2.0, но Prototype разработчикам придется научиться работать с измененным синтаксисом, и большая часть существующего кода прототипа устареет.