var Class=function(parent){
var klass=function(){
this.init.apply(this,arguments);
}
if(parent){
var subclass=function(){};
subclass.prototype=parent.prototype;
klass.prototype=new subclass;
}
klass.prototype.init=function(){};
//prototype's alias
klass.fn=klass.prototype;
klass.fn.parent=klass;
//class properties
klass.extend=function(obj){
var extended=obj.extended;
for(var i in obj){
klass[i]=obj[i];
}
if(extended) extended(klass);
}
//instance properties
klass.include=function(obj){
var included=obj.included;
for(var i in obj){
klass.fn[i]=obj[i];
}
if(included) included(klass);
}
return klass;
}
var Person=new Class();
Person.prototype.init=function(){
//do something init
};
Person.extend({
find:function(id){/* ... */};
exists:function(id){/* ... */};
extended:function(klass){
console.log(klass," was extended!");
};
});
Person.include({
save:function(id){/* ... */};
destory:function(id){/* ... ..*/};
included:function(klass){
console.log(klass," was included!");
};
});
var person=new Person();
person.save();
//原型繼承
var Animal=function(){};
Animal.prototype.breath=function(){
console.log("breath");
};
var Dog=function(){};
Dog.prototype=new Animal;
Dog.prototype.wag=function(){
console.log("wag tail");
};
var dog=new Dog;
dog.wag();
dog.breath();