Раз уж возник вопрос… Очень часто спрашивают меня.
Тут подумал как лучше объяснить прототипы
Забудьте про классы и т.п., т.к. в AVM1 ничего этого нет на самом деле
Есть только объекты и функции (особые объекты).
1) У любой функции есть свойство (объект) под названием prototype.
2) У любого объекта есть свойство-указатель на объект prototype той функции при помощи которой он был построен (конструктор класса). Это свойство указатель называется __proto__
А также свойство-указатель на саму функцию (конструктор класса) под названием constructor.
Соответственно, можно сказать, что у объектов (исключая функции) не бывает свойство prototype, но у функции есть свойства __proto__, т.к. функция - это тоже объект.
Когда мы смотрим какое-то свойство у объекта, сначала проверяется объект, если оно там не найдено, то по ссылке __proto__ проверяется объект prototype функции-конструктора, далее по ссылке __proto__ в самом прототипе смотриться следующий прототип и т.д. до конца цепочки наследования (до Object.prototype)
Код:
createEmptyMovieClip("mc",1) // создаем для примера мувик под именем mc
trace(mc.__proto__==MovieClip.prototype) // мувиклип под именем mc был построен функцией (классом) под именем MovieClip и имеет ссылку __proto__ на prototype своего класса-конструктора
trace(MovieClip.prototype.__proto__==Object.prototype) // цепочка наследлвания всегда завершается в Object.prototype
function Class(){}
trace(Class.constructor instanceof Function) // функция (класс) под именем Class построенна функцией (классом) под именем Function
trace(Class.__proto__==Function.prototype) // функция (класс) под именем Class была построенна функцией (классом) под именем Function и имеет ссылку __proto__ на свойство-объект prototype своего класса-конструктора
trace(Function.prototype.__proto__==Object.prototype) // цепочка наследлвания всегда завершается в Object.prototype
trace(mc.prototype==_global.prototype ) // собственно билиберда, т.к. undefined=undefined - у объектов (исключая функции) не бывает свойство prototype
PS в настройках паблиша надо включить AS1, чтобы слово Function не конфликтовало с компилятором AS2.