SOURCE

var Class = {
    extend:function({initialize,members,protos}){ 
           
            var _this = this;
            var newClass = function(options){

                //静态成员
                for(var i in members){
                    this[i] = members[i];
                }
                //实例化时的参数也并到实例成员中
                var options = options||{}
                for(var i in options){
                    if(this[i] && Object.prototype.toString.call(this[i]) === '[object Object]'){
                        this[i] = {
                            ...this[i],
                            ...options[i]
                        }
                    }else{
                     this[i] = options[i];   
                    }
                    
                }

                //执行初始化方法
                initialize && initialize.call(this);


                // this.extend = _this.extend;
            }
            newClass.extend = _this.extend

            //原型继承
            newClass.prototype = {
                ..._this.prototype,
                ...protos
            };
            return newClass; 
    },
    prototype:{
        class_f:function(){

        }
    }
}
 

var A = Class.extend({
    members:{
        a:1,
        b:2,
        f:function(){

        }, 
        options:{
            a:2
        }, 
    },
    initialize:function(){
        console.log('A类构造函数执行'); 
        // console.log(this.a);
        // console.log(this.b);
        // console.log(this.ss)

        // this.a_prototype_f();

        this.prototype.domId = "a"
    },
    protos:{
        a_prototype_f:function(){
            console.log('this.a');
            console.log(this.a);
        },
        returnDom:function(){
            return this.domId;
        }
    }
})

console.log(A)
var a = new A({
    ss:1,
    options:{
        a:1,
        b:2
    }
})
console.log(a);
 

var B = A.extend({
    members:{
        ww:1, 
    },
    initialize:function(){
        console.log('B类构造函数执行');
    },
    protos:{
        b_prototype_f:function(){
             console.log('b_prototype_f')
        }
    }
})
var b = new B();
console.log(b.returnDom())


// var C = B.extend({
//     members:{
//         ss:1
//     },
//     initialize:function(){
//         console.log('C类构造函数执行')
//     },
//     protos:{
//         c_prototype_f:function(){

//         },
//          b_prototype_f:function(){
//              console.log('覆盖了父类的方法')
//              console.log('c_prototype_f')
//         }
//     }

// }) 

// var c = new C()
// console.log(c) 
 
console 命令行工具 X clear

                    
>
console