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


Расширенное создание объектов (Visual Studio — JScript)

В JScript поддерживается наследование для пользовательских объектов на базе прототипов. Благодаря наследованию объекты на базе прототипов могут совместно использовать общий набор свойств и методов, которые можно динамически добавлять или удалять. Кроме того, отдельные объекты могут переопределять поведение по умолчанию.

Создание объекта на базе прототипа

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

Примечание

Чтобы внести изменения во все экземпляры объекта, необходимо изменить объект prototype конструктора.Изменение свойства prototype одного экземпляра объекта не оказывает влияния на другие экземпляры того же объекта.

Поскольку все свойства и методы объекта prototype копируются по ссылке в каждый экземпляр объекта, все экземпляры получают доступ к одним и тем же данным. Можно изменить значение свойства прототипа в одном экземпляре, чтобы переопределить значение по умолчанию, однако это изменение имеет силу только в рамках данного экземпляра. Ниже приведен пример, в котором используется пользовательский конструктор Circle. Оператор this предоставляет методу доступ к членам объекта.

// Define the constructor and add instance specific information.
function Circle (radius) {
    this.r = radius;  // The radius of the circle.
}
// Add a property the Circle prototype.
Circle.prototype.pi = Math.PI;
function ACirclesArea () {
   // The formula for the area of a circle is pi*r^2.
   return this.pi * this.r * this.r; 
}
// Add a method the Circle prototype.
Circle.prototype.area = ACirclesArea;
// This is how you would invoke the area function on a Circle object.
var ACircle = new Circle(2);
var a = ACircle.area();

Используя этот принцип, можно определять дополнительные свойства для существующих функций конструктора (которые все содержат объекты-прототипы). Однако такой метод будет работать только при выключенном быстром режиме. Дополнительные сведения см. в разделе /fast.

Например, если требуется удалить пробелы в начале и конце строки (подобно функции Trim в Visual Basic), можно создать собственный метод в объекте-прототипе String, и все строки скрипта будут автоматически наследовать этот метод. В этом примере используется литерал регулярного выражения для удаления пробелов. Дополнительные сведения см. в разделе Объект Regular Expression.

// Add a function called trim as a method of the prototype 
// object of the String constructor.
String.prototype.trim = function() {
   // Use a regular expression to replace leading and trailing 
   // spaces with the empty string
   return this.replace(/(^\s*)|(\s*$)/g, "");
}

// A string with spaces in it
var s = "    leading and trailing spaces    ";
print(s + " (" + s.length + ")");

// Remove the leading and trailing spaces
s = s.trim();
print(s + " (" + s.length + ")");

После компиляции этой программы с параметром /fast- выводится следующий результат:

    leading and trailing spaces     (35)
leading and trailing spaces (27)

См. также

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

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

Объекты JScript