| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Конструктор
Термин конструктор означает "нечто, что создаёт (конструирует) объекты". Мы знаем, что все объекты создаются из классов. Так что конструктор должен быть ЕОВСД (Ещё-Одним-Выдуманным-Словом-Для) класса. Ну, как бы это сказать... Точно так же, как и класс является частным случаем функции (только в ActionScript!), конструктор - это некая часть класса. Эта часть помогает "конструировать" объекты, как вы, наверное, уже догадались. Мы знаем, что объекты создаются при помощи объекта активации и аргументов. Но, стало быть и конструктор - это такой же объект активации. Да, так и есть. Трудности начнутся, когда мы вспомним, что объекта активации не существует, пока мы его не вызовем, а по окончании своей миссии он уничтожается - таких друзей в адресную книгу не вносят. Получается, что единственный способ "активировать" этот объект активации - вызвать свойство, которому он назначен, то есть объект, который даёт имя классу. Это прекрасно работает, потому что аргументы как бы "зажаты" между этими двумя объектами и так прочно друг к другу привязаны, что их часто рассматривают, как единое целое.
Ранее мы задавались вопросом, каким именно образом экземпляры ссылаются на
класс, который их создал. Ответ на этот вопрос - ключевое слово Dog = function( ) { this.instNum = ++this.constructor.count; } // следующие два свойства на самом деле не являются частью 'конструктора' Dog.count = 0; // используется для подсчета созданных собак Dog.className = "Dog"; // используется для запоминания имени класса rover = new Dog( ); fido = new Dog( ); trace( rover.instNum ); // 1 (первая собака создана) trace( fido.instNum ); // 2 (вторая собака создана) trace( rover.constructor.className ); // Dog Хотя использование конструктора не всегда нормативно, иногда без него просто
не обойтись. Очевидным преимуществом доступа к свойствам Что интересно, у прототипа класса всё-таки есть конструктор, потому что это, в конце концов, такой же объект, как и любой другой - объект, который был кем-то создан. Когда вы определяете класс, он немедленно создаёт объект имени, но не создаёт объекта активации (который создаётся только когда его вызывают). Но вот объект прототипа всё-таки создаётся и это происходит, как только мы определяем класс. Куда указывает конструктор прототипа? Точно так же, как и экземпляр, он указывает на объект класса имени. Но как бы нам это проверить? Можно просто добавить в верхнюю функцию следующее выражение: trace( Dog.prototype.constructor.className ); // Dog Довольно громоздко, не так ли? Но если присмотреться, мы увидим, что эта
строка всего лишь говорит: "Отследить имя класса объекта, создавшего
("сконструировавшего") прототип И напоследок ещё немного странностей. Объект имени класса ( Рубрика: Flash
VivaMP - инструмент для OpenMP.
Инструмент для программистов VivaMP предназначен для помощи разработчикам параллельных программ на базе OpenMP. В статье приведен краткий обзор программного продукта.
Подробнее... |
Рубрика: OpenMP
| Добавлено: 05.12.2008
Создаем контекстно-зависимое WPF-приложени....
Подробнее... |
Рубрика: Windows 7
| Добавлено: 05.12.2008
Windows Vista SP2: что внутри и что важно?.
Подробнее... |
Рубрика: Windows Vista
| Добавлено: 05.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|