src/util.js
function(Child, Parent) {
    var hasProp = {}.hasOwnProperty;

    function T() {
        this.constructor = Child;
        this.constructor$ = Parent;
        for (var propertyName in Parent.prototype) {
            if (hasProp.call(Parent.prototype, propertyName) &&
                propertyName.charAt(propertyName.length-1) !== "$"
           ) {
                this[propertyName + "$"] = Parent.prototype[propertyName];
            }
        }
    }
    T.prototype = Parent.prototype;
    Child.prototype = new T();
    return Child.prototype;
}
function(Child, Parent) {
    var hasProp = {}.hasOwnProperty;

    function T() {
        this.constructor = Child;
        this.constructor$ = Parent;
        for (var propertyName in Parent.prototype) {
            if (hasProp.call(Parent.prototype, propertyName) &&
                propertyName.charAt(propertyName.length-1) !== "$"
           ) {
                this[propertyName + "$"] = Parent.prototype[propertyName];
            }
        }
    }
    T.prototype = Parent.prototype;
    Child.prototype = new T();
    return Child.prototype;
}
function ( Child , Parent ) { var hasProp = { } . hasOwnProperty ; function T ( ) { this . constructor = Child ; this . constructor$ = Parent ; for ( var propertyName in Parent . prototype ) { if ( hasProp . call ( Parent . prototype , propertyName ) && propertyName . charAt ( propertyName . length - 1 ) !== "$" ) { this [ propertyName + "$" ] = Parent . prototype [ propertyName ] ; } } } T . prototype = Parent . prototype ; Child . prototype = new T ( ) ; return Child . prototype ; }
Un-magical enough that using this doesn't prevent extending classes from outside using any convention
Un - magical enough that using this doesn t prevent extending classes from outside using any convention