09. Функции. Часть 3. Конструкторы
Примеры
Конструктор класса Rectangle
praxis/09/examples/01/test.htm
Код примера:
// Конструктор класса Rectangle
function Rectangle(width, height)
{
// Свойства класса
this.width = width;
this.height = height;
// Методы класса
this.square = function () { return this.width * this.height;};
}
var rect1 = new Rectangle(1,2); // Создали первый экземпляр
var rect2 = new Rectangle(10,20); // Создали второй экземпляр
alert(rect1.square()); // 2 -- нашли площадь первого прямоугольника
alert(rect2.square()); // 200 -- нашли площадь второго прямоугольника
Конструктор класса Rectangle с прототипом
praxis/09/examples/02/test.htm
Код примера:
// Конструктор класса Rectangle
function Rectangle(width, height)
{
// Свойства класса
this.width = width;
this.height = height;
}
// Методы класса
Rectangle.prototype.square = function () { return this.width * this.height;};
// Работа с построенным классом
var rect1 = new Rectangle(1,2); // Создали первый экземпляр
var rect2 = new Rectangle(10,20); // Создали второй экземпляр
alert(rect1.square()); // 2 -- нашли площадь первого прямоугольника
alert(rect2.square()); // 200 -- нашли площадь второго прямоугольника
// Проверим, что находится в построенных объектах
function alertob(ob)
{
var str = "{";
for(p in ob) str += p+":"+ob[p]+",";
str = str.substring(0, str.length-1) + "}";
alert(str);
}
var rect = new Rectangle(12,85);
alertob(rect); // {width:12,height:85,
// square:function () { return this.width*this.height;}}
Константы класса
praxis/09/examples/03/test.htm
Код примера:
// Конструктор класса Rectangle
function Rectangle(width, height)
{
// Свойства класса
this.width = width;
this.height = height;
}
// Методы и константы класса
// Добавляем метод в прототип класса
Rectangle.prototype.square = function ()
{ return this.width * this.height;};
// Добавляем константу в прототип класса
Rectangle.prototype.IN2 = 2.54*2.54;
// Создать прямоугольник (размеры в сантиметрах)
var rect = new Rectangle(12,85);
// Вычислить его площадь в квадратных дюймах
alert(rect.IN2*rect.square()); // 6580.632
Чтение
praxis/09/examples/04/test.htm
Код примера:
function F(p)
{
this.p = p;
}
F.prototype.x = 10;
var ob = new F(1);
alert(ob.p); // Равно 1. Свойство p найдено в самом объекте ob
alert(ob.x); // Равно 10. Свойство x найдено в прототипе
alert(ob.y); // Равно undefined. Свойство y нигде не найдено
Запись
praxis/09/examples/05/test.htm
Код примера:
function F(p)
{
this.p = p;
}
F.prototype.x = 10;
var ob = new F(1);
ob.p = 2;
alert(ob.p); // Равно 2. Свойство p найдено в самом объекте ob
ob.x = 100; // Свойство x создается в самом объекте и, тем самым,
// перекрывает одноименное свойство прототипа.
alert(ob.x); // Равно 100. Получено значение свойства x в самом объекте,
// Одноименное свойство прототипа в этом объекте теперь
// недоступно (но остается доступным в других экземплярах
// класса F, поэтому не удаляется сборщиком мусора).
var ob1 = new F(2);
alert(ob1.x); // Равно 10
День по-русски
praxis/09/examples/06/test.htm
Код примера:
var d = new Date(); // Создали объект -- экземпляр класса Date
d.myGetDay = function () // Вернуть день недели по-русски
{
var dayNames = ["воскресенье", "понедельник", "вторник",
"среда", "четверг", "пятница", "суббота"];
return dayNames[this.getDay()];
}
alert(d.myGetDay()); // Получилось "воскресенье", так как я запустил
// этот код 27 июня 2010 года
var d1 = new Date();
alert(d1.myGetDay()); // Ошибка: d1.myGetDay is not a function
День по-русски 2
praxis/09/examples/07/test.htm
Код примера:
Date.prototype.myGetDay = function () // Вернуть день недели по-русски
{
// Более компактный вариант записи кода:
return ["воскресенье", "понедельник", "вторник",
"среда", "четверг", "пятница", "суббота"][this.getDay()];
}
var d = new Date(); // Создали объект -- экземпляр класса Date
alert(d.myGetDay()); // Получилось "воскресенье"
var d1 = new Date(); // Создали объект -- экземпляр класса Date
alert(d1.myGetDay()); // И здесь получилось "воскресенье"