6.1 Javascript的继承是基于原型的继承

6.1.1属性的继承

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. function Teacher(name,age,skill){
  6. Person.call(this,name,age)//Person(name,age)中的this指向window,需要改变this指向
  7. this.skill=skill;//this指向 Teacher构造函数的实例对象
  8. }
  9. var t=new Teacher("meng",21,"js");
  10. consloe.log(t)

6.1.2 方法的继承

  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=Person.prototype;//因为Teacher要使用Person里的sayName方法,把Person的原型赋给Teacher
  13. Teacher.prototype.sayName=function(){
  14. console.log(this.age)
  15. }
  16. Teacher.prototype.constructor=Teacher;//line12 因为把Person赋给了Teacher,所以Teacher的构造属性(constructor)也变成了Person的构造属性
  17. var t=new Teacher("meng",21,"js");
  18. var p=new Person("name",19)
  19. console.log(t)

es5方法

  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("meng",21,"js")
  21. console.log(t.constructor)
  22. t.sayName();
  23. t.sayAge();