On 11/28/12 4:42 PM, Alex Harui wrote:
I don't know enough to have an reason not to go the classic route. But
someone else will have to step up to do the work.
Classic is the fastest for me (often by a lot) - at least in Firefox.
Maybe I'm missing some reason to go with the others?
That said, because we are cross compiling AS, does the classic route support
as many features of AS, especially the reflection-oriented features? We
want to try to compile business logic untouched and it might be using "is",
"in", "instanceof", etc. Resig's blog seems to indicate that support for
instanceOf was important and required all of that code.
I don't think you need all that code, you can do this:
function BaseClass( yourVal ) {
this.someVal = yourVal;
}
BaseClass.prototype = {
myMethod: function() {
console.log( this.someVal );
}
};
function Extended( yourVal ) {
// super
BaseClass.apply( this, arguments );
this.someOtherVal = yourVal + " other";
}
Extended.prototype = Object.create( BaseClass.prototype ); // avoids
calling parent
Extended.prototype.myExtendedMethod = function() {
console.log( this.someOtherVal );
};
// override
Extended.prototype.myMethod = function() {
// super
BaseClass.prototype.myMethod.apply( this, arguments);
};
var ext = new Extended( "test" );
ext.myMethod(); // test
ext.myExtendedMethod(); // test other
ext instanceof BaseClass; // true
ext instanceof Extended; // true
Object.create is native in modern browsers, and has a simple polyfill
(for the relevant portions) for IE.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
Part of what John Resig was trying to do was to create editable and
writable classical inheritance from working within JS. FalconJS doesn't
have this constraint. We don't need to edit the generated Javascript
since the next AS3 compile would wipe out any changes anyway? Better to
make it fast (and besides, that's still readable, and you even could
edit it if you wanted).
Kevin N.