利用构造函数继承父类型属性

Posted perse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用构造函数继承父类型属性相关的知识,希望对你有一定的参考价值。

在ES6之前并没有提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承。

核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。

      // 借用父构造函数继承属性
      function Father(name, age) {
        // this指向父构造函数对象的实例
        this.name = name
        this.age = age
      }
      function Son(name, age) {
        // this指向子构造函数对象的实例
        Father.call(this, name, age)
      }
      var son = new Son(‘张三‘, 18)
      console.log(son) // Son {name: "张三", age: 18}

我们通过Father.call(this, name, age)传入Son中的this使Father的this指向改变成son。这样就不需要再在Son中写父类已经拥有的属性了。

而且如果子类还需要有自定义的属性,可以单独定义

      function Son(name, age, score) {
        // this指向子构造函数对象的实例
        Father.call(this, name, age)
        this.score = score
      }
      var son = new Son(‘张三‘, 18, 100)
      console.log(son) // Son {name: "张三", age: 18, score: 100}

当需要继承父类的方法时:

 Father.prototype.money = function() {
        console.log(‘我要赚钱‘)
      }
Son.prototype.exam = function() {
        console.log(‘我要考试‘)
      }

Son.prototype = new Father()

Son.prototype.constructor = Son

一定要记得改回construcotr指向!!!

 

以上是关于利用构造函数继承父类型属性的主要内容,如果未能解决你的问题,请参考以下文章

原型继承

对象继承——组合继承

Javascript学习笔记

236 子构造函数继承父构造函数中的属性

关于泛型

Javascript继承2:创建即继承----构造函数继承