Macromedia Flash 5. Объектно - ориентированное программирование




Конструктор - часть 2


  • Class - это нечто вроде хижины.
  • Constructor - это её часть, отвечающая за создание новых вещей.
  • Ранее мы задавались вопросом, каким именно образом экземпляры ссылаются на класс, который их создал. Ответ на этот вопрос - ключевое слово constructor. Он всегда используется изнутри объекта. Наилучшим образом он действует в границах экземпляра, который вы создали из вашего класса (хотя этим его действие, конечно же, не ограничивается, всегда полезно "пощупать" 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

    Хотя использование конструктора не всегда нормативно, иногда без него просто не обойтись. Очевидным преимуществом доступа к свойствам Dog через instance.constructor.xxx вместо Dog.xxx является то, что если вы когда-нибудь измените имя класса Dog на Canine, вам не придётся перелопачивать весь ваш код в поисках кусков, где есть ссылка на Dog. Такой способ также делает ваш код намного более портативным на тот случай, если, например, вам захочется использовать его в другом классе или даже в другой программе.

    Что интересно, у прототипа класса всё-таки есть конструктор, потому что это, в конце концов, такой же объект, как и любой другой - объект, который был кем-то создан. Когда вы определяете класс, он немедленно создаёт объект имени, но не создаёт объекта активации (который создаётся только когда его вызывают). Но вот объект прототипа всё-таки создаётся и это происходит, как только мы определяем класс. Куда указывает конструктор прототипа? Точно так же, как и экземпляр, он указывает на объект класса имени. Но как бы нам это проверить? Можно просто добавить в верхнюю функцию следующее выражение:




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