In ActionScript 3, there are some classes that will represent a value rather than the class itself. It’s hard to explain properly what I mean, so take this example:
var str:String = "something";
var mc:MovieClip = new MovieClip();
trace(str); // something
trace(mc); // [object MovieClip]
You’ll notice that the first trace outputs a value, rather than [object String]. Ontop of this, I can still make use of methods of String, like this:
var ar:Array = str.split('s');
Even though in a way you could almost read the above as:
"something".split('s');
I have a class AvLevelData that has some methods that deal with level data (which is essentially a String). At the moment there is a property data:String which represents the core level data.
The question I have is – can I replicate the behaviour of String in that when I trace or assign an instance of AvLevelData, the result is actually the String data.
For example, at the moment I need to go:
var levelData:AvLevelData = new AvLevelData();
trace(levelData.data);
To get the data. I instead want to be able to simply do the following:
var levelData:AvLevelData = new AvLevelData();
trace(levelData); // some level data string
Is this possible?
If you wan’t your object to trace out your own fabricated string then you must implement a
toString()function on yourAvLevelDataclass.In your example above, the
MovieCliptrace outputs:[Object MovieClip]; this comes from the defaulttoString()implementation forObject(found onObject.prototype) . Note, you cannot overridetoString()as it only exists on the prototype ofObject(remnants of the AS2/Javascript world), all you need to do is provide your own implementation with the same name. For instance: