﻿var Class = function(current, previous) {
    // Comprobamos si tenemos una Class que extender.
    previous = typeof previous == 'undefined' ? {} : previous.prototype;
    // Extendemos con las propiedades de la Class anterior
    for (p in previous) {
        // Si no existe la propiedad la añadimos
        if (typeof current[p] == 'undefined') current[p] = previous[p];
        // Si es una función
        else if (typeof previous[p] == 'function') {
            // añadimos this.parent() a la función de la Class actual.
            current[p] = (function(tmp) {
                var _parent = function() {
                    this.parent = _parent.parent;
                    return tmp.apply(this, arguments);
                }
                return _parent;
            })(current[p]);
            // Igualamos this.parent() al método de la Class anterior.
            current[p].parent = previous[p];
        }
    }
    // Construimos el contenedor
    var construct = function() {
        if (this.init) this.init.apply(this, arguments);
    }
    // Le aplicamos los métodos extendidos
    construct.prototype = current;
    // asignamos un constructor
    construct.constructor = Class;
    //Devolvemos el constructor.
    return construct;
}