-
原型链
function SuperType(){ this.property=true; } SuperType.prototype.getSuperValue=function(){ return this.property; } function SubType(){ this.subProperty=false; } SubType.prototype=new SuperType();//给SubType换个新原型
//不能通过使用对象字面量创建原型方法,会导致重写原型链 SubType.prototype={ getSubValue:function(){}, someOther:function(){} } //以上写法不可取
-
借用构造函数
function SuperType(){ this.colors=["red","blue"]; } function SubType(){ SuperType.call(this); this.age=30; }
-
组合继承(最常用的继承方式,结合方法一和方法二)
function SuperType(name){ this.name=name; this.colors=['red','blue']; } SuperType.prototype.sayName=function(){ alert(this.name); } function SubType(name,age){ SuperType.call(this,name); this.age=age; } SubType.prototype=new SuperType(); SubType.prototype.sayAge=function(){ alert(this.age); }
-
原型式继承
function object(o){ function F(){} F.prototype=o; return new F(); } var person={name:'frank',friends:['andy','anmi']} var anoPerson=object(person); anoPerson.friends.push('greg'); alert(person.friends);//['andy','anmi','greg'] //实现的是浅复制
ES6规范化:用Object.create() var anoPerson=Object.create(person,{ name:{ value:'test' } });
-
寄生式继承
function createAno(original){ var clone=object(original);//object是一个能返回新对象的函数 clone.sayHi=function(){ alert('hi'); } return clone; } var person={name:'greg'} var anoPerson=createAno(person);
-
寄生组合式继承
function inheritPrototype(subType,superType){ var prototype=object(superType.prototype); prototype.constructor=subType; subType.prototype=prototype; } function SuperType(name){ this.name=name; } SuperType.prototype.sayName=function(){ alert(this.name); } function SubType(name,age){ SuperType.call(this,name); this.age=age; } inheritPrototype(SubType,SuperType); SubType.prototype=function(){ alert(this.name); }