Работа с объектами
Оглавление
Работа с объектами
Страница 2
Страница 1 из 2
Здесь описаны некоторые приемы создания пользовательских и расширения
встроенных объектов JavaScript.
Как создать пользовательский объект?
Проблема
Нужно создать пользовательский объект, имеющий определенные свойства и
методы.
Решение
Объявление пользовательского объекта в JavaScript суть объявление особой
функции, которая создает все его свойства и методы и заполняет их начальными
значениями. Эта функция называется конструктором.
Формат объявления функции-конструктора ничем не отличается от формата
объявления обычной функции:
function <Имя пользовательского объекта> ([<Список параметров>])
{
<Объявление свойств объекта>
<Объявление методов объекта> }
Заметим, что имя функции-конструктора должно совпадать с именем объекта,
который мы хотим создать.
Формат выражения, создающего новое свойство пользовательского объекта,
таков:
this.<Имя свойства> = <3начение свойства>;
В данном случае ключевое слово this обозначает создаваемый объект.
Внимание!
Ключевое слово this имеет смысл только в теле функции-конструктора.
Формат выражения, создающего метод, аналогичен:
this.<Имя метода> = <Функция, реализующая этот метод>;
Фактически здесь мы присваиваем функцию созданному свойству. Заметим при
этом, что в данном случае имя функции указывается без списка параметров и без
скобок. Разумеется, реализующая метод функция должна быть объявлена.
В функциях, реализующих методы создаваемого объекта, мы также можем
использовать ключевое слово this. Собственно, даже не можем, а должны__
ведь это единственный способ получить доступ к свойствам и методам этого
объекта.
Созданный таким образом объект мы можем использовать в сценариях. Для
создания на его основе экземпляра мы воспользуемся знакомым нам оператором new,
а для удаления этого экземпляра — оператором delete.
Народ замечает
Описанный выше трюк с присвоением функции переменной работает и вне тела
функции-конструктора. Так, мы можем присвоить любую функцию переменной:
function func5()
{
// Тело функции
} var varFunc = func5;
а потом вызвать ее, обратившись к этой переменной:
varFunc() ;
Повторим — при присвоении функции переменной имя присваиваемой функции
указывается без списка параметров и без скобок, иначе интерпретатор JavaScript
посчитает его за вызов этой функции.
Пример
Давайте создадим объект Point, обозначающий точку на экране. Этот объект
будет содержать свойства х и у (координаты точки) и метод setcoords (помещение
значений координат, переданных в качестве параметров, в соответствующие
свойства).
Функция-конструктор этого объекта будет принимать два параметра — координаты
точки. Эти координаты будут помещены в свойства х и у создаваемого экземпляра
объекта.
// Объявление функции-конструктора объекта Point function Point(ix, iy) {
this.x = ix; this.у = iy;
this.setCoords = fSetCoords; } // Объявление функции, реализующей метод
setCoords объекта Point function fSetCoords(ix, iy)
{
this.x = ix; this.у = iy; }
Использование созданного объекта:
var p = new Point(50, 50); p.setCoords(100, 200); var px = p.x; delete p;
Как создать пользовательский объект на основе уже имеющегося?
Проблема
Есть уже созданный пользовательский объект. Нужно создать на его основе
другой объект, имеющий дополнительные свойства и методы.
Решение
Назовем уже имеющийся объект, на основе которого нужно создать новый,
объектом-предком, создаваемый на его основе объект— объектом-потомком, а сам
процесс порождения нового объекта на основе старого — наследованием. Свойства и
методы, которые объект-потомок получит "в наследство" от объекта-предка, пусть
называются унаследованными. Этими терминами пользуются все профессиональные
программисты.
Первым шагом создания объекта-потомка будет написание его
функции-конструктора. Ее формат будет таким:
function <Имя объекта-потомка> ({<Список параметров>]) {
this.base = <Имя объекта-предка>;
this.base([<Список параметров функции-конструктора
объекта-предка>]);
<Определение новых свойств объекта-потомка>
<Определение новых методов объекта-потомка>
Переопределение унаследованных свойств>
<Переопределение унаследованных методов> } <Имя
объекта-потомка>.prototype = new <Объект-предок>;
Первое выражение тела функции-конструктора объекта-потомка присваивает
функцию-конструктор объекта-предка свойству base. Это нужно, чтобы вызвать
конструктор предка, дабы он создал все унаследованные свойства и методы и
заполнил их значениями. Сам же вызов конструктора предка выполняется вторым
выражением тела конструктора потомка.
Пред. - След. »