function defineSubclass(superclass, //父类的构造函数 constructor, //新的子类的构造函数 methods, //实例方法:复制至原型中 statics) //类属性:复制至构造函数中{ //建立子类的原型对象 constructor.prototype = inherit(superclass.prototype); constructor.prototype.constructor = constructor; //像对常规类一样复制方法和类属性 if(methods) extend(constructor.prototype,methods); if(statics) extend(constructor,statics); return constructor;}function inherit(p){ if(!p){ throw TypeError();} if(Object.create){Object.create(p);} var t = typeof p; if(t !== "object" && t !== "function") { throw TypeError(); } function f(){}; f.prototype = p; return new f();}function extend(proto,methods){ proto[methods] = methods(); return proto;}function Person(name,age){ this.name = name; this.age = age;}Person.prototype.eat = function(){alert("eat!");}function Student(){}defineSubclass(Person,Student,function learn(){alert("learn!");})
//通过父类构造函数的方法来做到这一点
Function.prototype.extend = function(constructor,methods,statics){ return defineSubclass(this,constructor,methods,statics);}