1.原型链继承

创建对象时会自动继承原型上的所有方法和属性,所以就是将子类的原型变成父类
2.9 js的继承 - 图1

2.用call继承(借用构造函数)

在子类的内部调用父类,通过call改变父类中this的指向
等于是复制父类的实例属性给子类

  1. function myfunc1(){
  2. this.name = 'Lee';
  3. this.myTxt = function(txt)
  4. { console.log( 'i am',txt ); }
  5. }
  6. function myfunc2(){
  7. myfunc1.call(this);
  8. }

3.组合继承

2.9 js的继承 - 图2
添加到原型链上的同时,改变了this的指向

4.extends(类的继承)

5.寄生式继承

  1. 1核心:封装一个函数,在内部用object.create()让obj.__proto__等于0,获得他的所有方法和实例
  2. 创建一个仅用于封装继承过程的函数,该函数在内部以某种形式来做增强对象,最后返回对象。
  3. function h(o){
  4. const obj = Object.create(o);//将obj寄生在person上,获得他的属性和方法
  5. obj.sayHellow = function(){//给obj添加函数的方式增强对象,新增属性和函数增强对象
  6. console.log(this.name+this.age)
  7. }
  8. return obj;
  9. }
  10. var person = {
  11. name :'Lee',
  12. age : 18,
  13. }
  14. h(person).sayHellow()//Lee18

6.组合式寄生式继承

  1. function Father(name,age){
  2. this.name = name,
  3. this.age = age,
  4. this.list = [1,2,3,4,5]
  5. }
  6. Father.prototype.sayhello = function(){
  7. console.log('叫'+this.name+'今年'+this.age+'岁'+this.list);
  8. }
  9. function Child(name,age) {
  10. Father.call(this,name,age);
  11. }
  12. // 2. 添加寄生式继承Object.create
  13. Child.prototype = Object.create(Father.prototype);
  14. // Child.prototype.__proto__ === Father.prototype; 产生原型的继承关系
  15. // 3. 重新制定子类原型对象的构造函数
  16. Child.prototype.constructor = Child;
  17. const child = new Child('胡入侵',199)
  18. console.log(child);
  19. child.sayhello();