Создание объектов
В JavaScript объекты можно создавать либо при помощи оператора new, указывая функцию-конструктор объектов определенного типа, либо с помощью литеральной нотации, используя инициализаторы объектов.
Создание объектов в литеральной нотации
Создание объекта таким способом принципиально ничем не отличается от создания переменной любого другого типа. Надо просто присвоить новой переменной (объекту) соответствующий литерал. Литерал объекта представляет собой список пар свойств и соответствующих им значений, разделенных запятой. Такой список заключен в фигурные скобки, а имена свойств и значения разделены двоеточием. В общем виде это можно записать так:
{ prop_1 : val_1, prop_2 : val_2, ... ,prop_N : val_N }
Здесь prop_1, prop_2, prop_N — имена свойств объекта, а val_1, val_2, val_N — значения этих свойств. Значениями свойств могут являться переменные, константы, литералы (в том числе литералы функций, мас- сивов, объектов). Если в качестве значения свойства задан литерал функции либо ее идентификатор, то данное свойство будет являться методом объекта. Далее приведен пример создания объекта в литеральной нотации. Обратите внимание на способы определения методов объекта.
function f( )
{ return this.property_1 + this.property_2[1]; }
var myObject =
{
property_1: 10, // свойство с числовым значением property_2: [1, 2, 3],
// свойство со значением "массив"
Method_1 : f, // метод № 1
Method_2 : // метод № 2
function()
{ return this.Method_1() + 10 }
}
Создание объектов оператором new. Конструкторы объектов.
Второй способ создания объектов заключается в написании функции- конструктора (она будет определять тип объекта) и использовании оператора new совместно с этим конструктором. Конструкторам объектов, так же как и обычным функциям, могут передаваться параметры. Это обычно используется для присвоения начальных значений свойствам. Вот простейший пример создания объекта таким образом.
function Point(x, y)
{
this.x = x || 0;
this.y = y || 0;
this.Offset =
function(dx, dy)
{
this.x += dx;
this.y += dy;
}
}
var pt = new Point(0, 10);
pt.Offset(5, 6);
Как видно из примера, конструктор Point специфицирует два свойства объекта — x и y, а также один метод Offset. Затем создается объект pt типа Point при помощи оператора new и производится вызов метода Offset.
В конструкторе Point используется специальный синтаксис для присвоения значений по умолчанию свойствам x и y (например, x || 0). Здесь 0 — значение по умолчанию. Механизм работы данного метода заключается в особенности исполнения операции "ИЛИ" (||) в JavaScript. Эта операция возвращает значение первого аргумента, если оно конвертируется в true, или второго, если это не так.
Наряду с конструкторами встроенных объектов (таких как String, Date), ядро JavaScript содержит конструктор объектов, не имеющих свойств Object. Его удобно использовать для создания "объектов-пустышек", к которым впоследствии могут быть добавлены необходимые свойства и методы. Например:
var obj = new Object();
obj.x = 10;
В ряде случаев может возникнуть необходимость добавления свойств, либо методов к уже специфицированному типу объектов (как добавлять свойства к отдельно взятому объекту, рассматривалось ранее). Это мо- жет быть сделано при помощи свойства prototype. При этом добавлен- ные свойства и методы будут присутствовать как у всех созданных до этого, так и у всех вновь создаваемых объектов этого типа. Продолжив предыдущий пример, добавим типу объектов Point метод SetToOrigin, а затем вызовем этот метод для объекта pt:
Point.prototype.SetToOrigin = function()
{
this.x = this.y = 0;
};
pt.SetToOrigin( );
Здесь особо следует отметить тот факт, что если вы хотите иметь неко- торое свойство, значение которого может изменяться сразу для всех объектов определенного типа, то специфицировать и изменять это свойство следует только указанным выше методом — через свойство prototype конструктора.
Do'stlaringiz bilan baham: |