КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |