Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Удаление объекта класса в методе класса (http://www.flasher.ru/forum/showthread.php?t=89450)

ktotam 15.12.2006 23:07

Удаление объекта класса в методе класса
 
Привет! Проблема в удалении объекта класса из самого класса функция del(), что неправильно? а как надо? в помоще ничего не нашел.
Очень надо и не огорчите что так никак нельзя:umnik2:

Код:

//S_C.as
class S_C{
        static var chislo:Number=0;
        static function kolichestvo():Number{
                return chislo
        }
        public function S_C(){
                chislo++;
        }
        public function _del(){
                trace("del")
                chislo--;
                //????????????????????????????
                //delete S_C;
        }
}

Код:

// 1.fla
var s1:S_C=new S_C();
var s2:S_C=new S_C();
trace(S_C.kolichestvo())                //выводит 2- правильно
s1._del();                                //уменьшает количество
trace(S_C.kolichestvo())                //выводит "del" ; 1 - правильно


etc 16.12.2006 01:23

Господи, кто вас научил называть переменные транслитом? Гурский?
А имя класса «S_C» хоть что-нибудь говорит кому-нибудь, кроме создателя?

Удалить экземпляр класса внутри класса нельзя — только удаление через delete извне. В твоем случае delete s1; и уменьшение параметра «chislo» на след. строке.

ktotam 16.12.2006 10:16

Спасибо Денис, я не с такими классами работаю, просто наученный горьким опытом переписываю их в англоязычной форме, они у меня все по русски называются, класс с большой буквы, обьекты с маленькой, это во всех книгах рекомендуют.

Kikasso 16.12.2006 20:21

класс:
Код:

class Test{

public static var _total_:Number = 0;
private var id:String;
private var timeline:MovieClip;

public static function get total():Number{
                        return _total_;
}
public static function set total( total:Number ):Void{
                  _total_ = total;
}

 public function Test ( timeline:MovieClip, id:String) {
        this.timeline = timeline;
        this.id = id;
        total ++;
  }
 public function del():Void {
        total --;
    delete timeline[ id ];
}

}

таймлайн:
Код:

import Test;
var t1:Test = new Test(this, "t1");
var t2:Test = new Test(_root, "t2");
trace( t1 + "  "+ t2);
t1.del();
trace( t1 + "  "+ t2);

debug -> list variables: объект удален.
Идея простая - нам надо направить вызов delete на сам объект.

А насчет русских буков.. ЕЙ-богу, лучше транслитом..

Kikasso 16.12.2006 20:31

таймлайн можно получить изнутри класса:
Код:

public function Test ( id:String) {
timeline = eval(_target);
this.id = id;
}

вызов:
Код:

var t1:Test = new Test( "t1");
Вот тут без eval() не обойтись.

etc 17.12.2006 02:43

Kikasso, что такое _target?

Kikasso 17.12.2006 07:50

Цитата:

Сообщение от __etc
Kikasso, что такое _target?

Это какое-то мистическое слово.
код в первом кадре:
Код:

trace(_target); // выводит "/"
trace(eval(_target)); // выводит "_level0"

таймлайн, в котором сработал код.

То есть то самое место, где мы сказали
Код:

var t1:Test = new Test("t1");

etc 17.12.2006 12:47

Ясно. Только неясно, почему это у тебя работает — свойство _target есть только у мувиклипов, кнопок и текстовых полей.

Впрочем, адресация слешами была ещё в 4-ой версии, можно забыть.

Kikasso 17.12.2006 18:40

Вложений: 1
Цитата:

Сообщение от __etc
Ясно. Только неясно, почему это у тебя работает — свойство _target есть только у мувиклипов, кнопок и текстовых полей.
Впрочем, адресация слешами была ещё в 4-ой версии, можно забыть.

Правда ваша, уважаемый! :( Все классы AS2 глобальны, и _target изнутри класса ссылается на "/", где бы мы экземпляр класса не создавали. Ну чтож, передадим вручную. Зато объект можно создавать где угодно, в другом объекте например. Смотрите аттач. Засейвил под 7-ку.
Надо только помнить, что сам объект не убьется, пока не придет сборщик мусора и не увидит, что ссылок на объект больше нет.
Код:

var t4 = t3;
t3.del(); // объект остался под именем t4

PS:: В слове _target есть некий смысл. В ответ приходит строка, и ее можно использовать как идентификатор. Например, для ручного depth контроля.

etc 17.12.2006 18:46

Смысл, который есть в _target можно узнать в хелпе. Из-за организации, все классы лежат внутри мувиков, поэтому там есть _target. Хотя по факту, свойство не должно быть определено в не-мувиклипах. Лучше не вспоминать методы четверки и пользовать обычный delete. Объект из памяти удалить так просто нельзя. Да и какой смысл вообще в методе del()? Я могу его вызвать в совершенно ином месте для удаления ссылки на объект в том месте, где он был создан. А там, где я вызвал этот метод останется ссылка на него. Не заморачивайся :)


Часовой пояс GMT +4, время: 20:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.