1.属性的继承

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. //call能够实现属性的继承
  6. function Teacher(name,age,skill){
  7. var self=this;
  8. Person.call(self,name,age)
  9. this.skill=skill;
  10. }
  11. var t=new Teacher("zhang",18,"js")
  12. console.log(t);//Teacher {name: "zhang", age: 18, skill: "js"}

2.方法的继承

第一种方法

  1. //原型对象:js的继承就是基于原型的继承
  2. //第一种 方法的继承
  3. function Person(name,age){ //Person 类
  4. this.name=name;
  5. this.age=age;
  6. }
  7. Person.prototype.sayName=function(){ //在Person类的原型对象上添加一个sayName()方法
  8. console.log(this.name);
  9. }
  10. function Teacher(name,age,skill){ //Teacher类
  11. Person.call(this,name,age); //继承Person类的属性,用call改变this的指向,从指向window到指向Teacher的实例对象
  12. this.skill=skill
  13. }
  14. Teacher.prototype=Person.prototype; //重置Teacher类的原型对象,
  15. Teacher.prototype.sayAge=function(){ //在Teacher类的原型对象上添加一个sayAge()方法
  16. console.log(this.age);
  17. }
  18. Teacher.prototype.constructor=Teacher; //由于应直接量给对象原型添加了属性,所以要重置构造属性
  19. var t=new Teacher("zahng",18,"js"); //Teacher类的一个实例
  20. var p=new Person("lisi",13) //Person类的一个实例
  21. console.log(t);//输出对象
  22. console.log(t.constructor);//输出实例的构造属性
  23. t.sayAge()//18,调用sayAge()方法

第二种方法

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Person.prototype.sayName=function(){
  6. console.log(this.name);
  7. }
  8. function Teacher(name,age,skill){
  9. Person.call(this,name,age);
  10. this.skill=skill
  11. }
  12. Teacher.prototype=Object.create(Person.prototype,{
  13. constructor:{
  14. value:Teacher
  15. }
  16. })
  17. Teacher.prototype.sayAge=function(){
  18. console.log(this.age);
  19. }
  20. var t=new Teacher("zhang",18,"js");
  21. console.log(t);
  22. console.log(t.constructor);