Добавляем...


Базовые и пользовательские объекты / Литералы обьектов
    Кроме объяснения того, как объявляются экземпляры встроенных объектов типа String или Array, в предыдущих главах говорилось и о создании объектов Object. Эти базовые объекты могут использоваться для создания пользовательских типов данных, что ставит такие объекты в ряд самых мощных инструментов, применяемых для создания нетривиальных сценариев JavaScript.
    Как любому объекту в JavaScript, объекту Object можно динамически добавлять свойства:

var robot = new Object ();
robot.name = "Парабеллум";
robot.model = "Страж";
robot.hasJetpack = true;

    Динамически можно добавлять и функции. Следующий фрагмент программного кода является расширением предыдущего простого примера, полученным с помощью добавления метода в объект robot. Сначала мы определяем функцию, а затем добавляем ее в объект:

function strikelntruder ()
{
alert("БАХ!");
}
robot.attack = strikelntruder();

Обратите внимание на то, что мы назвали метод attack, хотя функция называлась strikelntruder. Можно назвать метод как угодно - интерпретатор не "интересует" то, какой идентификатор выбран. Вызывая метод

robot.attack();

получим следующий результат: БАХ!

Можно записать этот пример в такой форме, что даже не придется выбирать имя функции, названной выше strikelntruder. Модифицируем наш пример, используя указанную возможность:

var robot = new Object();
robot.name = "Парабеллум";
robot.model = "Страж";
robot.hasJetpack = true;
robot.attack = function()
{
alert("БАХ!");
);

    Этот синтаксис компактнее и позволяет избежать захламления глобального пространства функциями, которые будут использоваться только как методы пользовательских объектов. Он также иллюстрирует одно из главных преимуществ использования базовых объектов Object: возможность согласованного группирования связанных частей данных. Например, если у вас есть множество различных моделей роботов, которые вы собираетесь продемонстрировать пользователю, то размещение информации о каждой модели в отдельном объекте Ob j ect и использование согласованной схемы выбора имен для их свойств может сделать ваш программный код проще для понимания и поддержки.
Литералы объектов
JavaScript поддерживает синтаксис литералов для многих типов данных (в частности, для чисел, строк, массивов и функций), поэтому нет ничего неожиданного в том, что в JavaScript 1.2+ поддерживаются литералы объектов. Их синтаксис - это заключенный в фигурные скобки список разделенных запятыми пар свойство/значение. Пара свойство/значение задается с помощью указания имени свойства, за которым после двоеточия следует соответствующее значение. Ниже предлагается новый вариант предыдущего примера, в котором используются литералы, как объекта, так и функции:

var robot = { name: "Парабеллум",
model: "Страж",
hasJetpack: true,
attack: function() { alert("БАХ!"); }
};

Снова можно вызвать robot. attack () с тем же результатом, что и выше.
    Этот пример демонстрирует устойчивость такого подхода. Он вполне годится для вложения литералов, для свойств со значениями nu 11 и undefined, а также для значений, которые не являются литералами (т.е. для переменных). Следующий фрагмент программного кода иллюстрирует соответствующие возможности на примере, аналогичном представленным выше:

var jetpack = true;
var robot " { name: null,
hasJetpack: jetpack,
model: "Страж",
attack: function() { alert("БАХ!"); },
sidekick: { name: "Затвор",
model: "Пес",
hasJetpack: false,
attack: function() { alert("КЛАЦ!"); }
}
};
robot.name = "Парабеллум";

Здесь имеется достаточно много моментов, требующих объяснения. Во-первых, обратите внимание на то, что свойство hasJetpack объекта robot устанавливается здесь через переменную с именем j etpack. Заметьте также, что свойство robot .name сначала устанавливается равным null, но позже заменяется подходящим значением. Кроме того, теперь robot содержит вложенный объект sidekick, который также содержит четыре свойства: name, model, hasJetpack и метод attack. Вызов robot. attack () приводит к уже знакомому нам "БАХ! ", а в результате вызова

robot.sidekick.attack();

получим следующий результат: КЛАЦ!

Если способ, с помощью которого в предыдущих примерах определен объект robot, кажется вам громоздким и неэлегантным, ваше чутье программиста вас не обманывает. Имеется лучший способ создания собственных объектов, при котором объектно-ориентированная природа JavaScript используется намного эффективнее. Мы исследуем этот способ чуть позже в этой же главе, а сейчас на примерах проиллюстрируем возможности, доступные при определении объектов. Перед тем как двигаться дальше, давайте посмотрим на альтернативный вариант ссылки на объекты.


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика