AS3 - Возвращение свойства класса, а не самого класса - PullRequest
0 голосов
/ 30 ноября 2011

В ActionScript 3 есть некоторые классы, которые будут представлять значение, а не сам класс. Трудно правильно объяснить, что я имею в виду, поэтому возьмите этот пример:

var str:String = "something";
var mc:MovieClip = new MovieClip();

trace(str); // something
trace(mc); // [object MovieClip]

Вы заметите, что первая трасса выводит значение, а не [object String]. Помимо этого, я все еще могу использовать методы String, например:

var ar:Array = str.split('s');

Несмотря на то, что вы могли бы почти прочитать это как:

"something".split('s');

У меня есть класс AvLevelData, в котором есть несколько методов, которые работают с данными уровня (по сути, это String). На данный момент существует свойство data:String, которое представляет данные уровня ядра.

Вопрос, который у меня возникает, - могу ли я повторить поведение String в том, что когда я отслеживаю или присваиваю экземпляр AvLevelData, результатом фактически является String data.

Например, на данный момент мне нужно идти:

var levelData:AvLevelData = new AvLevelData();
trace(levelData.data);

Чтобы получить данные. Вместо этого я хочу иметь возможность просто сделать следующее:

var levelData:AvLevelData = new AvLevelData();
trace(levelData); // some level data string

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Некоторые из самых основных типов - String, int, Number, uint, Boolean, если назвать несколько - сами по себе не являются классами / объектами, они являются примитивами.В некоторых языках есть класс-обертка, доступный для некоторых из них, поэтому они могут рассматриваться как объекты, хотя Flash не делает этого так по моему опыту.

Вероятно, лучший способ ответить на ваш вопрос - этосоздайте метод toString() для вашего AvLevelData класса:

public function toString():String {
    return data;
}

Каждый раз, когда вы обрабатываете класс как строку (например, помещая его в trace()), flash (и многие другие языки)попробуйте вызвать toString () для объекта.Обычно это приводит к строке, которая не помогает.Но если вы определяете свой собственный метод toString(), вы можете контролировать, какая строка будет выводиться.

Другой вариант - просто сделать:

trace(AvLevelData.data);

Поскольку эта переменная является строкой, она должнатрассировка просто отлично.

1 голос
/ 30 ноября 2011

Если вы не хотите, чтобы ваш объект отслеживал свою собственную выдуманную строку, вы должны реализовать функцию toString() в своем классе AvLevelData.

В приведенном выше примере трассировка MovieClip выводит: [Object MovieClip];это происходит от реализации toString() по умолчанию для Object (находится на Object.prototype).Обратите внимание, что вы не можете переопределить toString(), поскольку он существует только в прототипе Object (остатки мира AS2 / Javascript), все, что вам нужно сделать, это предоставить собственную реализацию с тем же именем.Например:

public function toString():String {
   return "MyCustomObjectString";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...