Форум 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)
-   -   Работа с массивами. (addProperty) (http://www.flasher.ru/forum/showthread.php?t=97153)

Torero 14.06.2007 20:26

Работа с массивами. (addProperty)
 
День добрый.
Помогите пожалуйста разобраться с сабжем.
Есть желание каждому из элементов массива присвоить свойство "Prop"(Boolean), которое, по-умолчанию,= false. К сожалению, в хелпе мало информации по addProperty. Подскажите пожалуйста, как это сделать.

Нерабочий код:
Код:

import mx.core.UIObject;
class classes.C extends UIObject{
        public var arr:Array;
        public function C(){
                arr=[];
                arr.addProperty("Prop", arr.getProp, arr.setProp);

                arr.setProp = function(p:String):Void {
trace("Добавляем свойство: " + p);
                        if(p=="true"){this.Prop = true;}else{this.Prop = false;}
                };

                arr.getProp = function():Boolean {
                    return this.Prop;
                };

trace(arr.Prop)       
                arr[3].Prop="true";
trace(arr[3].Prop);
        }
}


BigDan 14.06.2007 20:43

Код:

arr[i] = {prop:true};

Torero 14.06.2007 22:18

2 BigDan:
Вы не ответили на мой вопрос. Про многомерные массивы я в курсе. Вопрос в следующем:
1.как задать свойства элемента массива?
2.как задать свойство-default для всех элементов массива?

грубо говоря, при трассировке хочется видеть следующее:

Код:

arr[1]=7;
trace(arr[1]+";  "+String(arr[1].Prop)); //"7;  false"

arr[1]=5;
arr[1].Prop=true;
trace(arr[1]+";  "+String(arr[1].Prop)); //"5;  true"


BigDan 14.06.2007 22:26

1.я тебе уже отписал во втором посте.
2.пройтись циклом по всем элементам.

Torero 14.06.2007 22:32

1.Не катит. прочитай что мне нужно увидеть при трассировке.
2. А что, нельзя чтобы при создании нового элемента массива это свойство было установлено у него дефолтом?
Что-нить типа arr.constructor{prop:false}

BigDan 14.06.2007 22:42

Цитата:

А что, нельзя чтобы при создании нового элемента массива это свойство было установлено у него дефолтом?
Что-нить типа arr.constructor{prop:false}
Можно написать свой класс(наследник Array) и реализовать это в нем.

silin 15.06.2007 01:20

имхо нельзя такое реализовать вовсе, в смысле нельзя простому типу дать свойство:
arr[1]=5;
arr[1].Prop=true;
//////
5.true ?

Torero 15.06.2007 06:35

2 silin: звучит разумно..
наследник Array делать бессмыслено т.к. проблема не в нем, а на уровне его элементов, а задать их свойства у меня не получилось (2 All: буду крайне признателен, если кто-нибудь кинет рабочий пример решения вопроса данным способом).
Обошел проблемку немного с другой стороны - решил сделать класс-наследник String, обладающий свойством "prop" и экземпляры данного класса помещать в массив.. Вроде звучит здраво, но реализовать не получается.. Укажите пожалуйста на ошибку в коде.


Код:

        public function C(){
                arr=[];
                function newstr(){
                        this.prop="!!";
                        this.txt="123456"                       
                        return this.txt;
                }
                newstr.prototype= new String;
                var c=new newstr;
                trace(c +";  "+ c.txt +";  "+ c.prop); //Имеем:    [object Object];  123456;  !!
        }                                                //Хочется:  123456;  123456;  !!


silin 15.06.2007 09:22

непонятно чего ты хочешь реализовать..
повторюсь, нельзя организовать свойство у простого типа, только у наледника Object
т.е. елементами твоего массива должны быть объекты, для которых определены prop, value, txt или чего еще захочешь, о чем тебе BigDan сразу и сказал..
если нужно дефолтовое значение, ничего не мешает его определить
Код:

class Element {
        var prop:Boolean=false;
        var value:Number;
        function Element(val:Number){
                value=val;
        }
}

Код:

var arr=[];
arr[1]=new Element(7);
trace(arr[1].value+";  "+arr[1].prop); //7;  false


Torero 15.06.2007 18:26

Спасибо. Это и было нужно. Объект(наследование от String) я создал, но дефолтовое свойство пытался для него через return прописать - не получилось. Спасибо. Топик закрыт.


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

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