Поделиться через


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

В JScript предусмотрена удобная возможность определения функций конструктора для создания пользовательских объектов на базе прототипов, которые можно использовать в скриптах. Для создания экземпляра объекта на базе прототипа необходимо сначала определить функцию конструктора. Этот процесс состоит из создания нового объекта и его инициализации (создания свойств и присвоениям им начальных значений). После завершения работы конструктор возвращает ссылку на созданный объект. Внутри конструктора ссылка на объект осуществляется с помощью оператора this.

Конструкторы со свойствами

В следующем примере определяется функция конструктора для объектов pasta. Оператор this позволяет конструктору инициализировать объект.

// pasta is a constructor that takes four parameters.
function pasta(grain, width, shape, hasEgg) {
   this.grain = grain;    // What grain is it made of?
   this.width = width;    // How many centimeters wide is it?
   this.shape = shape;    // What is the cross-section?
   this.hasEgg = hasEgg;  // Does it have egg yolk as a binder?
}

После определения конструктора объекта экземпляры объекта создаются с помощью оператора new. В данном примере конструктор pasta используется для создания объектов spaghetti и linguine.

var spaghetti = new pasta("wheat", 0.2, "circle", true);
var linguine = new pasta("wheat", 0.3, "oval", true);

Можно динамически добавлять свойства к экземпляру объекта, однако эти изменения относятся только к данному экземпляру.

// Additional properties for spaghetti. The properties are not added
// to any other pasta objects.
spaghetti.color = "pale straw";
spaghetti.drycook = 7;
spaghetti.freshcook = 0.5;

Если необходимо добавить дополнительное свойство ко всем экземплярам объекта, не изменяя функцию конструктора, можно добавить свойство к объекту-прототипу конструктора. Дополнительные сведения см. в разделе Расширенное создание объектов (Visual Studio — JScript).

// Additional property for all pasta objects. 
pasta.prototype.foodgroup = "carbohydrates";

Конструкторы с методами

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

В следующем примере расширяется определенная выше функция конструктора pasta, чтобы включить в нее метод toString, который будет вызываться, если функция отображает значение объекта. (Если объект используется в ситуации, когда требуется строка, в JScript, как правило, используется метод toString самого объекта. Потребность в явном вызове метода toString возникает крайне редко.)

// pasta is a constructor that takes four parameters.
// The properties are the same as above.
function pasta(grain, width, shape, hasEgg) {
   this.grain = grain;    // What grain is it made of?
   this.width = width;    // How many centimeters wide is it?
   this.shape = shape;    // What is the cross-section?
   this.hasEgg = hasEgg;  // Does it have egg yolk as a binder?
   // Add the toString method (defined below).
   // Note that the function name is not followed with parentheses;
   // this is a reference to the function itself, not a function call.
   this.toString = pastaToString;
}

// The function to display the contents of a pasta object.
function pastaToString() {
   return "Grain: " + this.grain + "\n" +
          "Width: " + this.width + " cm\n" +
          "Shape: " + this.shape + "\n" +
          "Egg?:  " + Boolean(this.hasEgg);
}

var spaghetti = new pasta("wheat", 0.2, "circle", true);
// Call the method explicitly.
print(spaghetti.toString());
// The print statement takes a string as input, so it
//  uses the toString() method to display the properties
// of the spaghetti object.
print(spaghetti);

При выполнении этого кода выводится следующий результат.

Grain: wheat
Width: 0.2 cm
Shape: circle
Egg?:  true
Grain: wheat
Width: 0.2 cm
Shape: circle
Egg?:  true

См. также

Другие ресурсы

Объекты, основанные на прототипах

Объекты JScript