function _inheritPrototype(subType,superType){
var prototype = Object.create(superType.prototype); // 复制原型链
prototype.constructor = subType; // 设置 constructor 为自己
subType.prototype = prototype; // 设置 prototype 的值。
Object.keys(superType).forEach(function(k){
subType[k] = superType[k];
});
}
function _wrap(fn){
// 继承实现。
fn.extend = function(sub){
_inheritPrototype(sub,fn);
return wrap(fn);
};
// 原型链方法。
fn.methods = function(o){
Object.keys(o).forEach(function(k){
fn.prototype[k] = o[k];
});
return fn;
};
// 静态方法
fn.statics = function(o){
Object.keys(o).forEach(function(k){
fn[k] = o[k];
});
return fn;
};
return fn;
}
function Klass(fn){
return _wrap(fn || function(){});
}
Klass.extend = _inheritPrototype;
// test
var Animal = Klass(function(name){
this.name = name;
}).methods({
talk:function(){
return 'i am'+ this.name;
}
});
var Bird = Animal.extend(function(name){
Animal.call(this,name);
});
Bird.methods({
fly:function(){
return 'i am flying ';
}
})
var bird = new Bird('bird');
console.log(bird.talk()); // i am bird
console.log(bird.fly());// i am flying
ths: https://github.com/aralejs/class/issues/15