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()); // И здесь получилось "воскресенье"