Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Создание объекта с помощью функции-конструктора




Создание пользовательского объекта с помощью инициализатора имеет тот существенный недостаток, что для каждого, даже однотипного, объекта приходится задавать свой инициализатор. Использование для создания пользовательского объекта функцию-конструктор позволяет с ее помощью создавать экземпляры объектов, аналогично тому, как это делается для встроенных объектов JavaScript. В функции-конструкторе функции определяются свойства и методы для данного объекта. Определение этой функции в JavaScript имеет следующий синтаксис:

function имя-объектного-типа (параметр-1, параметр-2, ...)

{

this. свойство-1 = параметр-1;

this. свойство-2 = параметр-2;

...

this. имя-метода-1 = имя-функции-1;

this. имя-метода-2 = function(список-параметров-1)

{ тело-функции-1 };

...

}

Как видно из приведенного определения свойства объекту присваиваются с помощью параметров, однако это не является обязательным. Свойства объекту могут быть присвоены внутри функции-конструктора, например, с помощью выражений, как в инициализаторе объекта.

Далее в функции-конструкторе следуют предложения, определяющие методы для данного объектного типа. Функции для этих методов можно двумя способами: с помощью отдельной функции и непосредственно в предложении определения метода.

При первом способе в предложении задания метода указывается, что для выполнения метода с именем имя-метода будет вызвана функция с именем имя-функции. (как это сделано для первого метода).

Функции для методов данного объекта определяются отдельно:

function имя-функции-1 (параметры-1)

{

тело функции-1

}

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

Создание нового экземпляра объекта выполняется с помощью предложения new:

var имя-объекта = new имя-объектного-типа (аргумент-1, аргумент-2, ...)

Обращение к свойствам и методам созданного объекта выполняется с использованием точечной нотации:

имя-объекта. свойство-1

имя-объекта. метод-1 (агрументы-1)

Язык JavaScript поддерживает объекты, свойствами которых, в свою очередь, могут быть другие объекты.

 

Пример 4.4.64. Использование функции-конструктора:

1. // Функция-конструктор объектного типа Point

function Point(x, y)

{

this.x = x; // Свойство x: координата x точки

this.y = y; // Свойство y: координата y точки

// Метод assign - присваивание координат точки

this.assign = assignValue;

// Метод move - перемещение точки

this.move = movePoint;

 

// Метод toString - строковое представление точки

this.toString = function()

{

return "(" + this.x + "," + this.y + ")";

}

}

// Функция assignValue, реализующая метод assign

function assignValue(x, y)

{

// Присваивание значения координате x точки

this.x = x;

// Присваивание значения координате y точки

this.y = y;

// Возврат объекта

return this;

}

// Функция movePoint, реализующая метод move

function movePoint(dx, dy)

{

// Перемещение точки на заданное

// приращение по оси x

this.x += dx;

// Перемещение точки на заданное

// приращение по оси y

this.y += dy;

}

// Создание объекта point1 типа Point

point1 = new Point(3, 4);

// Вывод свойств объекта point1

alert("point1: x=" + point1.x + " y=" + point1.y);

// Создание объекта point2 типа Point

point2 = new Point(-3, 5);

// Создание объекта point3 типа Point

point3 = point2;

// Вывод объектов point1, point2 и point3

alert("point1=" + point1 + " point2=" + point2 +

" point3=" + point3);

// Присвоение point1 нового значения

point1.assign(7,10);

// Перемещение point3

point3.move(3,-3);

// Вывод объектов point1, point2 и point3

alert("point1=" + point1 + " point2=" + point2 +

" point3=" + point3);

В этом фрагменте сценария с помощью функции-конструктора определен пользовательский объект Point с теми же свойствами и методами, что и в примере 4.4.63(1), а затем созданы два объекта типа Point – point1 и point2. Во фрагменте также создан объект point3, связанный с объектом point2 и выводятся характеристики объектов до и после изменения значений объектов point1 и point3.

Вывод этого фрагмента имеет следующий вид:

 

 

2. // Функция-конструктор объектного типа Line

function Line(Point, Point)

{

// Координаты x и y начала линии

// (использован объект типа Point)

this.coord1 = arguments[0];

// Координаты x и y окончания линии

// (использован объект типа Point)

this.coord2 = arguments[1];

// Метод определения длины линии

this.length = getLength;

// Метод преобразования

// объекта Line в строку

this.toString = function()

{

return "(" + this.coord1.toString() +

"," + this.coord2.toString() + ")";

}

}

// Функция getLength, реализующая метод length

function getLength()

{

// Определение и возврат длины линии

return Math.sqrt(Math.pow(this.coord1.x -

this.coord2.x, 2) +

Math.pow(this.coord1.y - this.coord2.y, 2));

}

// Создание объекта line1 типа Line

var line1 = new Line(new Point(3,4), new Point(7,8));

// Вывод текущих значений свойств

// coord1 и coord2 объекта line1

alert("line1: x=" + line1.coord1.toString() +

" y=" +line1.coord2.toString());

// Задание начальной точки линии line2

point1 = new Point(0,3);

// Задание конечной точки линии line2

point2 = new Point(3,0);

// Создание объекта line2 типа Line

var line2 = new Line(point1, point2);

 

// Вывод координат и длины line1 и line2

alert("line1=" + line1.toString() +

" Длина: " + line1.length() +

"\nline2=" + line2.toString() +

" Длина: " + line2.length());

В этом фрагменте сценария с помощью функции-конструктора определен пользовательский объект Line с теми же свойствами и методами, что и в примере 4.4.63(2), а затем созданы два объекта типа Line – line11 и line2. Во фрагменте также выводятся свойства объекта line1, а затем строковое представление объектов line1 и line2 и их длины.

Вывод этого фрагмента имеет следующий вид:




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 281; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.