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