通过es5 实现 类继承 通过super 给父级传参的效果

先看看 原型继承

  function es5parent(name, age) {
    this.name = name;
    this.age = age;
  }

  es5parent.prototype.say = function() {
    console.log(this.name, this.age, this.sex);
  }
  
  function es5child(sex) {
    this.sex = sex;
  }
  
  es5child.prototype = new es5parent('李四',21);
  es5child.prototype.say1 = function() {
    this.say();
  }

  const es5obj = new es5child('');
  es5obj.say1(); //输出 李四 21 女

这里 实例是无法像父构造函数传参的,在实例对象之前就已经调用了父函数

再看看 类继承, 是可以通过创建实例化对象的时候 把参数通过super传递到父类

  class parent {
    constructor(name, age){
      this.name = name;
      this.age = age;
      console.log(name, age); // 输出 张三 23
    }
    say() {
      console.log(this.name, this.age, this.sex);
    }
  }

  class child extends parent {
    constructor(name, age, sex) {
      super(name, age);
      this.sex = sex;
    }
    say1() {
      this.say();
    }
  }

  const obj = new child('张三', 23, '');
  obj.say1(); // 输出 张三 23 男

es5 通过call 实现

  function es5parent(name, age) {
    this.name = name;
    this.age = age;
  }

  es5parent.prototype.say = function() {
    console.log(this.name, this.age, this.sex);
  }
  
  function es5child(name, age, sex) {
    this.sex = sex;
    es5parent.call(this, name, age);
  }
  
  es5child.prototype = new es5parent();
  es5child.prototype.say1 = function() {
    this.say();
  }
  const es5obj = new es5child('李四', 21, '');
  es5obj.say1(); // 李四 21 女

 

posted on 2023-03-31 11:23  浅唱年华1920  阅读(119)  评论(0编辑  收藏  举报