function Person(name,sex){ this.name=name; this.sex=sex; } Person.prototype.showName=function(){ console.log(this.name); } Person.prototype.showSex=function(){ console.log(this.sex); } Person.prototype.walk=function(){ console.log("向前走"); } Person.prototype.language="汉语"; //---------------------------------------------------- function Worker(name,sex,job){ Person.call(this,name,sex);//调用父类构造 this.job=job; } /* 如果子类Woker以 Worker.prototype=Person.prototype 这样的方式继承时 采用原型链的方式,此方式的缺点就是: 1、父类中也会子类中独有的方法; Person.prototype.showJob 2、子类如果重写父类中的属性和方法,那么父类中的属性和方法就会被覆盖掉 p1.walk();//向后走 console.log(p1.language)//English 所以为了避免影响父类中的方法,采用for in */ //Worker.prototype=Person.prototype for(var i in Person.prototype){ Worker.prototype[i]=Person.prototype[i]; } Worker.prototype.showJob=function(){ console.log(this.job); } Worker.prototype.walk=function(){//采用原型链的方式会覆盖掉父类中的方法 console.log("向后走"); } Worker.prototype.language="English"; var p1=new Person("blue","男") p1.showName();//blue p1.showSex();//男 p1.walk();//向前走 console.log(p1.language)//汉语 console.log(Person.prototype.showJob)//undefined 如果采用 Worker.prototype=Person.prototype 那么Person类中就有子类showJob独有的方法 var oWk=new Worker("John","男","设计师") oWk.showName(); oWk.showSex(); oWk.showJob(); oWk.walk(); console.log(oWk.language)//English