Конструкторы

Ранее мы видели, что создавать и инициализировать новый объект JavaScript можно при помощи оператора new в сочетании с предопределенными функциями-конструкторами, такими как Object(), Date() и Function().

Эти предопределенные конструкторы и встроенные типы объектов, создаваемые ими, во многих случаях полезны. Однако в объектно-ориентированном программировании принято также работать с собственными объектными типами, определенными программой. Например, при написании программы, работающей с прямоугольниками, удобно было бы представить их в виде специального типа, или класса объектов. Каждый объект этого класса Rectangle должен иметь свойство width и height, так как это основные характеристики прямоугольников.

Чтобы создавать объекты со свойствами вроде только что упомянутых width и height, нам потребуется написать конструктор, создающий новый объект и инициализирующий его свойства. Конструктор – это функция JavaScript, имеющая две особенности:

• Она вызывается с помощью оператора new.

• Ей передается в виде значения ключевого слова this ссылка на только что созданный, пустой объект, и конструктор отвечает за выполнение соответствующих действий для нового объекта.

Пример 8.1 показывает, как можно определить и вызвать функцию-конструктор для объекта Rectangle.

Пример 8.1. Функция-конструктор объекта Rectangle
// Определяем конструктор.
// Обратите внимание, как в нем иницилизируется объект с помощью
// "this"
function Rectangle(w, h)
{
this.width = w;
this.height = h;
}
// Вызываем конструктор для создания двух объектов Rectangle.
// Мы передаем ширину и высоту конструктору, чтобы
// можно было правильно проинициализировать оба новых объекта.
var rect1 = new Rectangle(2, 4);
var rect2 = new Rectangle(8.5, 11);

Обратите внимание, как конструктор использует свои аргументы для инициализации объекта, на который ссылается ключевое слово this. Помните, что функция-конструктор просто инициализирует указанный объект; она не должна возвращать его. Мы определили класс объектов, просто определив соответствующую функцию-конструктор – все объекты, созданные конструктором Rectangle(), те-перь гарантированно имеют инициализированные свойства width и height.

Это значит, что мы можем писать программы, учитывающие это обстоятельство и единообразно работающие со всеми объектами Rectangle. Каждый конструктор определяет класс объектов, поэтому стилистически важно дать функции-конструктору имя, указывающее на класс создаваемых ею объектов. Создание прямоугольника с помощью new Rectangle(1,2) выглядит намного понятнее, чем, например, new init_rect(1,2).

Функции-конструкторы обычно не возвращают значений. Они инициализируют объект, переданный как значение this, и ничего не возвращают. Однако конструктор имеет право возвращать объектное значение, и, если это так, этот возвращаемый объект становится значением выражения new. В этом случае объект, который был значением this, просто отбрасывается.
Добавлено: 17 Августа 2013 11:41:17 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...