类式继承
//extend function function extend(subClass,superClass){ var F=function(){}; F.prototype=superClass.prototype; subClass.prototype=new F(); subClass.prototype.constructor=subClass; subClass.superclass=superClass.prototype; if(superClass.prototype.constructor == Object.prototype.constructor){ superclass.prototype.constructor = superClass; } }
//class Person function Person(){ ... } //class Author function Author(){ Author.superclass.constructor.call(); } extend(Author,Person) Author.prototype.sayName=function(){ ... };
原型继承
//clone function function clone(obj){ var F=function(){}; F.prototype= obj; return new F(); } //class Person var Person{ name:'Byronvis', sayName:function(){ alert(this.name); } } //class Author var Author=clone(Person); Author.age='32'; Author.sayAge=function(){ alert(this.age); } var someObj=clone(Author); someObj.name='Elvis'; someObj.age=’23';
掺元类
//augment function function augment(receivingClass,givingClass){ if(arguments[2]){ for(var i = 2,len = arguments.length;i++){ receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]]; } } else{ for(methodName in givingClass.prototype){ if(!receivingClass.prototype[methodName]){ receivingClass.prototype[methodName] = givingClass.prototype[methodName]; } } } } //Mixin class var Mixin = function(){}; Mixin.prototype = { serialize:function(){ var output = []; for(key in this){ output.push(key + ':' + this[key]); } return output.join(','); } }; augment(Author,Mixin);