Просмотр полной версии : Объекты.
У меня есть 8 мувиков. Набор действий, которые могут быть выполнены по отношению к каждому из них, одинаковы для всех. Так вот тут напрашивается такое решение - описать класс и сделать 8 экземпляров. Но у меня возник такой вопрос: если я не хочу создавать новые объекты, а хочу "приделать" методы к самим мувикам, то как мне поступить тогда? Писать восемь раз одну и ту же функцию для каждого мувика глупо, а воспользовать оператором new я тоже не могу, потому что объекты уже существуют. Как мне лучше всего поступить? Спасибо.
MovieClip.prototype.myMethod = function () { };
Добавление метода к прототипу MovieClip вы зовет появление этого метода во всех экземплярах класса MovieClip, т.е. во всех мувиках, а у меня их много, но дополнительные методы нужно ввести не во все, а только в 8 их них.
sergwizard
29.04.2002, 21:45
Посмотри Smart Clips. Я думаю, это то , что тебе нужно.
УильямБрэдберри
29.04.2002, 22:40
Оригинал написал(а) Corpse
Добавление метода к прототипу MovieClip вы зовет появление этого метода во всех экземплярах класса MovieClip, т.е. во всех мувиках, а у меня их много, но дополнительные методы нужно ввести не во все, а только в 8 их них.
тогда напиши конструктор, который и будет добавлять в мувик новый метод, в зависимости от его свойств.
например для мувиков, имена которых начинаются на [ xyz ]
if (this._name.substr(0,3)=="xyz")...........
Nox Noctis
29.04.2002, 23:23
если делаешь в мыксе, то можно сделать просто:
8class = function () {};
8class.prototype = new MovieClip();
8class.prototype.customMethod = function () {....................}
Object.registerClass("linckage", 8class);
но тогда тебе надо будет аттачить твои клипы из библиотеки...
Nox Noctis
30.04.2002, 00:10
Оригинал написал(а) Nox Noctis
но тогда тебе надо будет аттачить твои клипы из библиотеки...
бррр.... глупости какие... :) вечерний приступ тупости после работы... :D
хорошо что никто пока не заметил...
на самом деле тебе главное при регистрировании класса таким способом - это чтобы в библиотеке был такой линкейдж... а уж аттачишь ты клип, или ручками кладешь в таймлайн - это уже твое личное дело - все работет, проверено...
Nox Noctis
30.04.2002, 00:32
еще пара вариантов (менее конструктивных ;) )
можно сделать проще -
использовать метод 'apply' во время вызова... тогда функция будет всего одна, а применяться сможет как метод к чему угодно...
и еще - у тебя ведь есть имена клипов, в которых должен быть этот хитрый метод ?
можно сделать этот метод, а присоединить его простым присвоением (вообще без всякого конструктора)... никто ведь не мешает делать присвоение ссылки на функцию...
это не так красиво и не так универсально, но зато просто :)
RFMitrio
30.04.2002, 01:37
Вопрос: а почему плохо, если будет метод добавлен к прототипу movieClip? Ну и что, что он будет применим для всех мувиков, а не только для 8-ми, ведь все равно в памяти 1 раз содержится и на ресурсоемкости плохо не отразится. А вот если для каждого из 8-ми мувов регистрить этот метод - тогда он и будет 8 раз храниться, и это будет неэкономично. Поэтому, ИМХО, лучше по тупому добавить его к прототипу movieClip...
Nox Noctis
30.04.2002, 01:48
мм... вообще-то да... при обращении к методу объекта сначала просматривается объект на наличие этого метода, а потом (если нет в самом объекте такого метода) его прототип (или его родительский класс)... в мыксе, кстати, добавлено обращение super, для того, чтобы можно было ссылаться на суперкласс...
но что в случае присвоения ссылки на метод, что в случае создания нового класса - память выделится один раз :) так что разницы никакой - вопрос как будет чище и удобнее...
RFMitrio
30.04.2002, 16:36
2 Nox Noctis: Ты МХ-ом испорчен ;) ;) А я имел в виду старые 5-шные штуЧки.
А именно:
если для каждого нужного мува определить, например
onClipEvent(Load)
{
this.method = function(){trace(this._name);}
}
Для каждого мува будет транслироваться этот код.
Если сделать:
В руте:
m=function(){trace(this._name);}
в муве:
onClipEvent(Load)
{
this.method = _root.m;
}
Для каждого мува будет транслироваться ссылка на _root.m, хотя _root.m транслируется 1 раз.
А вот на movieClip.prototype ссылка и так транслируется для всех мувиков, поэтому лишних затрат памяти не будет. Отсюда вывод: лучше использовать добавление методов в прототип. :cool: Хотя быстродействие упадет, поскольку мувики полезут в прототип в поисках метода.
---
это все предположения , но похожие на правду ;)
Nox Noctis
30.04.2002, 16:55
2RFMitrio
не вижу разницы...
неважно в мыксе или в пятерке ты напишешь
function someFunction () {........};
someMovieClip.method = someFunction;
ты в любом случае передашь ссылку, а не сделаешь копию функции...
ну да, ссылка будет записана энное количество раз, но что-то мне подсказывает, что учитывать затраты на хранение ссылок в данном случе все равно что учитывать световое давление на клавиши при наборе скрипта :D :D
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.