Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать

5.4.2. Прототипы

Каждый объект имеет свойство prototype, которое определяет его структуру. Прототип относится к порождающему объекту и похож на указатель super в языке Java. Свойство prototype является свойством конструктора, прототипированные свойства относятся ко всем объектам (аналогично static в Java). Пример прототипирования приведен ниже:

Book.prototype.paper = false;

Book.prototype.isPaperBook = function() {

if (this.paper) alert("This is a paper book");

else alert("This is not a paper book");

}

function Book(isPaper) {

if (isPaper) this.paper = true;

}

var myBook = new Book(true);

myBook.isPaperBook(); //выведет фразу «This is a paper book»

В этом примере показано создание метода объекта и свойства.

JavaScript позволяет нам задать новый прототип для класса пользовательских объектов (прототипы встроенных объектов доступны только для чтения). Рассмотрим такой пример:

function Circle(radius) {//констуктор1

this.radius = radius;

}

Circle.prototype.dl = function() {

return Math.PI * 2*this.radius;

}

function OCircle(x, y, radius) {

this.x = x;

this.y = y;

this.radius = radius;

}

OCircle.prototype = Circle.prototype;

var myCircle = new OCircle(0, 0, 1);

document.write(myCircle.dl());

В этом примере сначала определяется класс объектов Circle со свойством radius и методом dl(). Затем определяется класс OCircle, конструктор которого дополнительно содержит координаты центра окружности. Затем указывается, что он наследует прототип класса Circle. После этого создается объект myCircle и вызывается метод dl(), унаследованный от прототипа класса Circle. JavaScript поддерживает наследование, основанное на прототипах.

С каждым конструктором связан соответствующий прототип объекта, и каждый объект, созданный конструктором, содержит неявную ссылку на этот прототип. Прототип, в свою очередь, может содержать ссылку на свой прототип. Так образуется цепочка прототипов. Ссылка на свойство объекта — это ссылка на первый прототип в цепочке прототипов объекта, который содержит свойство с данным именем.

Хэш-таблицы в JavaScript

Объект Object в JavaScript находится в вершине иерархии и в то же время представляет собой обычный ассоциативный массив или "хэш". Он хранит любые соответствия "ключ => значение" и имеет несколько методов. Следующие два варианта создания объекта эквивалентны:

var o = new Object()

var o = {}

Есть два способа добавления свойств в объект. Первый - точка, вто­рой - квадратные скобки:

o.test = 6// эквивалентные записи

o["test"] = 6

var name = 'test'

o[name] = 6

Имя свойства "test" является ключом в ассоциативном массиве. Еще один пример:

var obj = new Object();

obj.property = 10;

alert(obj['property']);// то же самое, что и obj.property.

Удаление свойств осуществляется с помощью оператора delete:

alert(delete obj['property']); //выведет true

alert(obj['property']); //выведет undefined

Создание объектов с помощью инициализатора

Инициализатор объекта имеет вид:

{свойство:значение [,свойство:значение]}

Здесь свойство — идентификатор, задающий имя свойства, а значение — выражение, задающее значение этого свойства.Например, объект myBook может быть создан так:

var myBook = {name: "Programming", version: "6"};

Добавим еще одно свойство options, которое является объектом:

var myBook = {name: " Programming", version: "6",

options: {enableJava: true, enableCookies: false}};