On 11/27/12 5:56 PM, Daniel Wasilewski wrote:

However, when comes to FalconJS the task is to use strict proper OOP language like AS3 to translate into JS. In my humble opinion, this is what is all about, to protect us and give us more robust development environment and target the platform we need without writing FOR the platform. The fact that we are using AS3, output doesn't need to leverage all those concepts on the target level at all. Even if the output code would be set of plain objects or procedural style chain of objects, if better for performance and the final result, better for everyone. Good for marketing Apache Flex JS as the robust environment, web RIA development environment.

I agree, and I can't see how you'd emulate certain things in a clean way anway - like protected or internal class members. You can kinda do privates with closures and literals, but you lose a bunch of stuff, like instanceof, it uses more memory, and it's actually slower at runtime (even if definition - boot up - is a bit faster).

As for perf tests, maybe throw one of these in there:

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 constructing parent
Extended.prototype.myExtendedMethod = function() {
    console.log( this.someOtherVal );
};

var ext = new Extended( "test" );
ext.myMethod(); // test
ext.myExtendedMethod(); // test other

ext instanceof BaseClass; // true
ext instanceof Extended; // true

That's the closest I think you can get to classical inheritance in pure JS (you'll need to polyfill Object.create for IE), while maintaining the prototype chain.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

Kevin N.

Reply via email to