[Laszlo-dev] Any portable way to write this idiom?
P T Withington
ptw at laszlosystems.com
Thu Sep 11 05:44:18 PDT 2008
On 2008-09-10, at 22:48EDT, Henry Minsky wrote:
> In the debugger/LzMessage class, there is some code like this
>
> function toArray () {
> var array = [this.locationString(this.constructor.type)];
>
> Which essentially gets the classname, via the static var "type", of
> whatever subclass of LzMessage is
> being operated on. I guess I can write this['constructor'].type, but I
> wonder if there is a better way
> to be doing this? This seems a little bit baroque.
This should be portable. If you have an object in JS the constructor
property of that object should be the class of the object. All this
code is trying to do is get at a static property of the class of the
object, but dynamically. The thing is, C++ apparently made everyone
believe you should not be able to access static properties in this way
-- because it did not want to support runtime introspection.
Apparently the 'portable' way to do this is to either: a) make the
property an instance property (waste space copying it into each
instance), or b) write a getter method to retrieve the property (waste
time making a method call). Bleah.
So, yes, I guess instead of:
> class LzError extends LzSourceMessage {
> static var type = 'ERROR';
> static var color = '#ff0000';
> ...
You'll have to write:
class LzError extends LzSourceMessage {
function override messageType () { return 'ERROR'; }
function override messageColor () { return '#ff000'; }
...
Oh well.
> Maybe we should be overriding a "classname()" method on each of the
> subclasses of LzMessage? Seems
> like that would be more readable. Just trying to keep things easy to
> understand/maintain....
More information about the Laszlo-dev
mailing list