ActionScript 3 - возвращение / проверка значения класса при объявлении - PullRequest
0 голосов
/ 26 июля 2010

Мне интересно, есть ли способ имитировать то же поведение, которое мы имеем для классов верхнего уровня в AS3, например:

var myArray:Array = [1,2,3,4];
trace(myArray) // [1,2,3,4];

Как видите, при трассировке он возвращает собственный объект.
но если я создам свой собственный класс, то extends Array я получу

var queue:Queue = new Queue([1,2,3,4]);
trace(queue) // no output

так что здесь 2 вопроса.

возможно ли создать собственный экземпляр класса так же, как я создаю массив, например:

var queue:Queue = [1,2,3,4];
//instead
var queue:Queue = new Queue([1,2,3,4]);

и как я могу вернуть суперобъект при запросе такого объекта, как;

trace(queue) // [1,2,3,4];

Я не уверен, возможно ли это сделать в AS3

спасибо за помощь

Ответы [ 3 ]

1 голос
/ 27 июля 2010

По данным aliveocs.adobe.com ,

"Вы можете расширить класс Array и переопределить или добавить методы. Однако вы должны указать подкласс как динамический, иначе вы потеряете возможность хранить данные в массиве."

Возможно, вы явно не указываете подкласс как динамический (объявленный как public dynamic class Queue)?

0 голосов
/ 01 августа 2010

Лучший способ сделать это - переопределить метод класса toString, который можно сделать для вывода того, что вы хотите, когда вы объединяете класс со строкой или просто отслеживаете ее.

public class MyClass
{
    private var _values:Array = [1,2,3,4];
    .
    .
    . 
    override public function toString():String
    {
        return 'MyClass[' + _values.join(',') + ']';
    }
}

var mc:MyClass = new MyClass();
trace(mc);

Что бы вывести:

MyClass[1,2,3,4]
0 голосов
/ 01 августа 2010

@ jamie-wong указал правильный ответ, ответ @quasimondo right here .

Это не мой ответ, но для @quasimondo, но, поскольку нет никакого способа классифицировать комментарий как правильный ответ, я бы предпочел, чтобы вместо этого был дан ответ на этот вопрос. Все кредиты идут для них обоих.

...