Class extending with Class.Extend()

by Chad Drummond

JavaScript

Function.prototype.Extend = function Extend(C, proto) {    
    var P = (Function !== this) ? this : function Class(){};
    var F = function (){};
    C = C || function Fn() {};
    F.prototype = P.prototype;
    C.prototype = new F();
    for (var v in proto) {
        if (proto.hasOwnProperty(v)) {
            C.prototype[v] = proto[v];
        }
    }
    C.prototype.Constructor = C;
    C.prototype.Parent = P;
    return C;
};

var Class = Function.Extend(function Cl() {

},{
    getType: function() {
        return this.Constructor.name;
    }
});

var Animal = Class.Extend(function Animal(){ 

}, {
    alive: true,
    planet: 'Earth',
    location: function() {
        return this.planet;
    }
});


var Mammal = Animal.Extend(function Mammal() {
    
}, {
    type: Animal.name
});

var Cat = Mammal.Extend(function Cat() {
    this.sound = function() {
        console.log('Meoww');
    };
}, {
    planet: 'Congo'
});

var kitty = new Cat();
console.log(kitty);