Ядро JavaScript 1.5. Справочник




Prototype


Значение, на основе которого создаются экземпляры определённого класса. Каждый объект, который может быть создан путём вызова функции constructor, имеет ассоциированное свойство prototype.

Свойство из

Реализован в

JavaScript 1.1, NES 2.0

Версия ECMA

ECMA-262

Описание

Вы можете добавлять новые свойства и методы в существующий класс, добавляя их к прототипу, ассоциированному с функцией constructor данного класса. Синтаксис добавления нового свойства или метода таков:

fun.prototype.name = value

где

 

fun

Имя объекта функции constructor, который Вы хотите изменить.

name

Имя создаваемого свойства или метода.

value

Начальное значение нового свойства или метода .

Если Вы добавляете свойство к прототипу объекта, все объекты, создаваемые функцией constructor этого объекта будут иметь это новое свойство, даже если объекты существовали до создания нового свойства. Например, предположим, мы имеем такие операторы:

var array1 = new Array();

var array2 = new Array(3);

Array.prototype.description=null;

array1.description="Contains some stuff"

array2.description="Contains other stuff"

После того как Вы установили свойство для прототипа, все последующие объекты, созданные с Array, будут иметь это свойство:

anotherArray=new Array()

anotherArray.description="Currently empty"

Пример

В этом примере создаётся метод str_rep и используется оператор String.prototype.rep = str_rep для добавления метода ко всем объектам . Все объекты, созданные с помощью new String(), будут иметь этот метод, даже объекты, созданные ранее. Затем создаётся другой метод и добавляется к одному из объектов через использование оператора s1.rep = fake_rep. Метод str_rep

остальных объектов не изменяется.

var s1 = new String("a")

var s2 = new String("b")

var s3 = new String("c")

// Создаётся метод repeat-string-N-times для всех String-объектов

Function str_rep(n) {

   var s = "", t = this.toString()

   while (--n >= 0) s += t

   return s

}

String.prototype.rep = str_rep

s1a=s1.rep(3) //

возвращает "aaa"

s2a=s2.rep(5)  //

возвращает "bbbbb"

s3a=s3.rep(2)  // возвращает "cc"

// Создаёт другой метод и назначает его только одной переменной String

Function fake_rep(n) {

   return "repeat " + this + " " + n + " times."

}

s1.rep = fake_rep

s1b=s1.rep(1) //

возвращает "repeat a 1 times."

s2b=s2.rep(4) //

возвращает "bbbb"

s3b=s3.rep(6) //

возвращает "cccccc"

Функция из этого примера работает также с объектами , не созданными с помощью конструктора Следующий код возвращает "zzz".

"z".rep(3)

toSource">




Содержание  Назад  Вперед