![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Здравствуйте.
Я подгружаю в главный мувик другой мувик. В главном есть класс и я хочу, чтобы подгруженный мувик стал экземпляром этого класса. Если бы этот самый мувик находился в библиотеке в качестве символа, то можно было бы сделать просто Object.registerClass("MySymbolID", MyClass), но тут не получится, так как главный мувик не имеет достуа к библиотеке подгруженного мувика. В общем, я пробовал сделать через __proto__: //Это мой класс
function MyClass() {
...
}
// Здесь мувик уже загружен, меняем ссылку на прототип.
myMovie.__proto__ = new MyClass;
Хотелось бы узнать что происходит при подмене __proto__ у экземпляра (по моим наблюдениям ничего страшного), и как сделать так, чтобы подгруженный мувик стал экземпляром нужного мне класса, при условии, что внутри загружаемого мувика не должно быть вообще никакого кода. Варианты типа // Добавляем новый метод в экземпляр.
myMovieClip.myMethod = function () {
...
}
или
// Добавляем метод в класс.
MovieClip.prototype.myMethod = function() {
...
}
Кто может предложить что-то лучшее? Спасибо. |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
если сделать прототипом
твоего подгружаемого класса объект МувиКлип - то замена __прото__ у мувика не приведет к потере родных мувиклиповых методов cls = function (name) {
this.prop = "!!!!!!!!"+name+"!!!!!!!!";
};
cls.prototype = new MovieClip();
cls.prototype.method = function() {
trace("method of "+this.prop+" called !");
};
//
x = createEmptyMovieClip("$1", 666);
x.__proto__ = new cls();
//
ASSetPropFlags(x.__proto__, null, 8, true);
for (i in x.__proto__) {
trace(i+" :: "+typeof (x.__proto__[i])+" :: "+x.__proto__[i]);
}
Последний раз редактировалось Nox Noctis; 26.09.2002 в 21:38. |
|
|||||
|
Спасибо, это я знал, но к сожалению не все так просто. Например, вот код.
// Создаем новый мувик.
_root.createEmptyMovieClip("square", 1);
// Рисуем красный прямоугольник.
with (_root.square) {
beginFill(0xFF0000);
moveTo(0, 0);
lineTo(100, 0);
lineTo(100, 100);
lineTo(0, 100);
lineTo(0, 0);
endFill();
}
//Строка ниже закоментирована.
//_root.square.__proto__ = {};
// Очищаем мувик и рисуем зеленый квадрат левее.
with (_root.square) {
//Строка ниже закоментирована.
//clear();
beginFill(0x00FF00);
moveTo(200, 0);
lineTo(300, 0);
lineTo(300, 100);
lineTo(200, 100);
lineTo(200, 0);
endFill();
// Поворачиваем весь мувик целиком на 45 градусов.
_rotation = 45;
}
То ли я чего-то не понимаю, то ли __proto__ экземпляра лучше не трогать, так как последствия непредсказуемы. И все же как присвоить класс подгруженному мувику? Неужели перечисленные выше способы единственные? |
|
|||||
|
Так, стоп, тормознул я чего-то. Вы правы, Nox Noctis, только добавлю, что строка
x.__proto__ = new cls(); будет каждый раз создавать новый обект-протоитп для каждого экземпляра поэтому это надо сделать один раз, а потом. y.__proto__ = x.__proto__; Всем спасибо, как я сам не догадался? ![]() |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
это я по инерции написал, аналогично cls.prototype = new MovieClip(); правильнее написать x.__proto__ = cls.prototype хотя результат тот же: на самом деле prototype и __proto__ - это разные названия одного и того же |
![]() |
Часовой пояс GMT +4, время: 23:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|