Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему обьекты не одинаковые? (http://www.flasher.ru/forum/showthread.php?t=125540)

wer32 26.05.2009 17:49

Почему обьекты не одинаковые?
 
Есть класс

Код AS3:

package
{       
        public class NewsItem
        {
                private var _title:String;
                private var _description:String;
                private var _link:String;
 
                public function NewsItem(title:String, descrition:String, link:String)
                {
                        _title = title;
                        _description = descrition;
                        _link = link;
                }
 
                public function clone():NewsItem
                {
                        var newsItemClone:NewsItem = new NewsItem(_title, _description, _link);
                        return newsItemClone;
                }
 
                public function get title():String { return _title; }
 
                public function get description():String { return _description; }
 
                public function get link():String { return _link; }
 
        }
}

в основном классе пробую

Код AS3:

package  
{
        import flash.display.Sprite;
        import wer32.NewsItem;
 
        public class Main extends Sprite
        {
                public function Main()
                {
                        var news1:NewsItem = new NewsItem("1", "2", "3");
                        var news2:NewsItem = news1.clone();
                        trace(news1 == news2);
                }
        }
}

Трасер выдает false.

Стало быть объекты не одинаковы. Почему так происходит :eek:

Gal4enochek 26.05.2009 17:56

сравнение проходит не по полям объекта а по ссылкам. вы создали ДРУГОЙ объект, пусть с теми же значениями полей, но ДРУГОЙ. если вы измените объект news1, news2 не изменится, так как ссылка у него другая.
Напишите в вашем классе функция сравнения, что типа
Код AS3:

function compare(object :NewsItem):Boolean{
    return(
      this._title == object.title
      && this._description == object.descrition
      && this._link ==  object.link
    );
}

И сравнивайте с помощью нее

Nirth 26.05.2009 17:57

Потому что они разные инстансы=)
Допишите метод в NewsItem
Код AS3:

public function equals(newsItem:NewsItem):Boolean
{
    return (title == newsItem.title && description == newsItem.description && link == newsItem.link)
}


wer32 26.05.2009 18:00

ОООО спасибо вам преогромнейшее :)
Примерно такие мысли были но уложить по полочкам как то не мог :)
еще раз спасибо :)

BlooDHounD 26.05.2009 19:01

Gal4enochek, compare по логике должен возвращать качественный результат сравнения. тобишь на сколько они разные. обычно это ( -1, 0, 1 ).

Gal4enochek 26.05.2009 19:27

Ну сорри,:rolleyes: Какое первое пришло в голову название метода, так и назвала :)
Критику учтем :)

Nirth 26.05.2009 19:43

Вау синхронный постинг=)


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

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