1.属性的继承
function Person(name,age){this.name=name;this.age=age;}//call能够实现属性的继承function Teacher(name,age,skill){var self=this;Person.call(self,name,age)this.skill=skill;}var t=new Teacher("zhang",18,"js")console.log(t);//Teacher {name: "zhang", age: 18, skill: "js"}
2.方法的继承
第一种方法
//原型对象:js的继承就是基于原型的继承//第一种 方法的继承function Person(name,age){ //Person 类this.name=name;this.age=age;}Person.prototype.sayName=function(){ //在Person类的原型对象上添加一个sayName()方法console.log(this.name);}function Teacher(name,age,skill){ //Teacher类Person.call(this,name,age); //继承Person类的属性,用call改变this的指向,从指向window到指向Teacher的实例对象this.skill=skill}Teacher.prototype=Person.prototype; //重置Teacher类的原型对象,Teacher.prototype.sayAge=function(){ //在Teacher类的原型对象上添加一个sayAge()方法console.log(this.age);}Teacher.prototype.constructor=Teacher; //由于应直接量给对象原型添加了属性,所以要重置构造属性var t=new Teacher("zahng",18,"js"); //Teacher类的一个实例var p=new Person("lisi",13) //Person类的一个实例console.log(t);//输出对象console.log(t.constructor);//输出实例的构造属性t.sayAge()//18,调用sayAge()方法
第二种方法
function Person(name,age){this.name=name;this.age=age;}Person.prototype.sayName=function(){console.log(this.name);}function Teacher(name,age,skill){Person.call(this,name,age);this.skill=skill}Teacher.prototype=Object.create(Person.prototype,{constructor:{value:Teacher}})Teacher.prototype.sayAge=function(){console.log(this.age);}var t=new Teacher("zhang",18,"js");console.log(t);console.log(t.constructor);
