Объекты, свойства и методы
Основные понятия
Как уже отмечалось выше, JavaScript - это язык программирования, основанный на объектах. Все объекты, доступные сценарию на языке JavaScript, подразделяются на три группы:
встроенные объекты исполняющей системы;
объекты среды, в которой исполняется сценарий (т. е. либо объекты клиента, либо объекты сервера);
пользовательские объекты, создаваемые сценарием в процессе его выполнения.
Объект JavaScript - это неупорядоченный набор свойств. Свойство, являющееся функцией, называется методом. Для доступа к свойству объекта используется синтаксис:
имя_объекта.имя_свойства
Если название свойства задано текстовой строкой, то доступ к свойству возможен и так:
имя_объекта["имя_свойства"]
Этот синтаксис используется оператором итерации for:in.
Каждое свойство состоит из названия, значения и набора следующих атрибутов:
Атрибут | Описание |
---|
DontEnum | Свойство не должно попадать в перечисление при итерации объекта оператором for:in. | DontDelete | Попытка программно удалить данное свойство будет проигнорирована. См. описание операции delete. | ReadOnly | Неизменяемое свойство. Попытка программно изменить данное свойство будет проигнорирована. (Отметим, что в некоторых случаях значение свойства с этим атрибутом может быть изменено через внешнюю среду.) |
Новое свойство объекта создается просто присваиванием ему значения. Пусть, например, мы уже создали объект myBrowser, который должен описывать наш Веб-обозреватель. Это описание будет состоять из названия обозревателя (name) и его версии (version). Для создания указанных свойств мы должны включить в сценарий следующие строки:
myBrowser.name = "Microsoft Internet Explorer"; myBrowser.version = "5.5";
У таких свойств, созданным пользователем, все перечисленные выше атрибуты сброшены в false. В дальнейшем мы можем изменять значения этих свойств или извлекать их, например:
document.write(myBrowser.name, myBrowser.version);
Существует два способа создания новых объектов в JavaScript, а именно:
Создание объектов с помощью инициализатора
Этот способ позволяет одновременно создать объект и присвоить значения всем или части его свойств. Он применяется в тех случаях, когда мы создаем объект с уникальным набором свойств. Инициализатор объекта имеет вид:
{свойство:значение [,свойство:значение]?}
Здесь свойство - идентификатор, задающий имя свойства, а значение - выражение, задающее значение этого свойства.
Например, объект myBrowser из предыдущего примера может быть создан так:
var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5"};
Усложним этот пример, добавив еще одно свойство объекта myBrowser, которое называется options (опции обозревателя) и само является объектом:
var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5", options: {enableJava: true, enableCookies: false}};
Создание объектов с помощью конструктора
Этот способ применяется в тех случаях, когда мы хотим создать класс объектов с определенным набором свойств, а затем создавать новые объекты, просто указывая, к какому классу они должны принадлежать. Для этого нужно сначала создать конструктор объектов, который является функцией специального вида, а именно:
Например, конструктор для класса объектов Browser из предыдущего примера может иметь следующий вид:
function Browser(name, version) { this.name = name; this.version = version; }
Обратите внимание на использование операции this для доступа к свойствам объекта.
Теперь для создания новых объектов класса Browser достаточно вызвать этот конструктор в операции new, например:
var myBrowser = new Browser("Microsoft Internet Explorer", "5.5");
Вспомним теперь, что выше мы добавили свойство options объекта Browser, которое само является объектом. Перепишем приведенный пример с учетом этого свойства:
function Options(enableJava, enableCookies) { this.enableJava = enableJava; this.enableCookies = enableCookies; }
function Browser(name, version) { this.name = name; this.version = version; this.options = options; }
var myOptions = new Options(true, false); var myBrowser = new Browser("Microsoft Internet Explorer", "5.5", myOptions);
Для доступа к свойствам свойства options используется нотация myBrowser.options.enableJava.
Создание методов
Поскольку методы являются разновидностью свойств, они создаются так же, как описано выше. Например, мы можем добавить к конструктору объектов Browser метод aboutBrowser, который будет выводить на экран обозревателя информацию о свойствах этого объекта:
function showBrowser() { document.write("Обозреватель: " + this.name + " " + this.version); }
function Browser(name, version) { this.name = name; this.version = version; this.aboutBrowser = showBrowser; }
В дальнейшем мы можем вызвать этот метод так: myBrowser.aboutBrowser().
При желании конструктор можно записать и короче, используя вложенное определение функции:
function Browser(name, version) { this.name = name; this.version = version; this.aboutBrowser = function() { document.write("Обозреватель: " + this.name + " " + this.version); } }
Изменение прототипа объекта
Допустим, что мы хотим в процессе выполнения сценария добавить новое свойство security (безопасность) классу объектов Options (подчеркнем еще раз - классу объектов, а не отдельному его представителю myOptions). Для этого используется свойство prototype объекта Function:
Options.prototype.security = null;
Теперь мы можем присвоить значение новому свойству объекта:
myBrowser.options.security = "Высокая";
Для удаления свойств объектов используется операция delete, например:
delete Options.prototype.security;
JavaScript позволяет нам задать новый прототип для класса пользовательских объектов (прототипы встроенных объектов доступны только для чтения). Рассмотрим такой пример:
function Circle(radius) { this.radius = radius; }
Circle.prototype.area = function() { return Math.PI * this.radius * this.radius; }
function FullCircle(x, y, radius) { this.x = x; this.y = y; this.radius = radius; }
FullCircle.prototype = Circle.prototype;
var myCircle = new FullCircle(0, 0, 1); document.write(myCircle.area());
В этом примере сначала определяется класс объектов Circle со свойством radius и методом area, возвращающим площадь круга. Затем определяется класс FullCircle, конструктор которого дополнительно содержит координаты центра окружности. Затем указывается, что он наследует прототип класс Circle. После этого мы создаем объект myCircle и вызываем его метод area, который он унаследовал от прототипа класса Circle.
Удаление объектов
Мы можем удалить ранее созданный объект с помощью операции delete, например:
delete myBrowser;
1 2
8 8 8
| |