美文网首页
JavaScript 常用继承方式

JavaScript 常用继承方式

作者: 七七的眼睛 | 来源:发表于2019-12-31 10:39 被阅读0次

JavaScript 常用继承方式

  • 原型链继承

    构造函数,原型,实例之间的关系:每个构造函数之间都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都会包含一个原型对象的指针

    function Animal() {
      this.name = '动物'
    }
    
    Animal.prototype.getName = function() {
      return this.name
    }
    
    function Dog() {
      this.age = 2
    }
    
    Dog.prototype = new Animal()
    
    Dog.prototype.getAge = function() {
      return this.age
    }
    
    const dog = new Dog()
    
    console.log(dog.getName()) //动物
    

    缺点:多个实例对引用类型的操作会被篡改,即父类原型上的方法可以被重写

  • 借用构造函数继承

    function Animal(name) {
      this.name = name
    
      this.getName = function() {
        return this.name
      }
      this.setName = function(name) {
        return this.name = name
      }
    }
    
    Animal.prototype.getInfo = function() {
      return this.name + 'jijijio'
    }
    
    function Dog(age,name) {
      Animal.call(this,name)
      this.age = age
      this.getAge = function() {
        return this.age
      }
      this.setAge = function(age) {
        this.age = age
      }
    }
    
    const dog = new Dog(12, '狗狗')
    const ani = new Animal()
    // console.log(ani.getInfo())
    console.log(dog.name) // error  dog.getInfo is not a function
    

    优点:可以给父类传递参数

    缺点:1.只能继承父类的实例属性和方法,不能继承原型的属性和方法

    ​ 2.无法实现复用,每个子类都有父类实例函数的副本,影响性能

  • 组合继承

    function Animal(name) {
      this.name = name
    
      this.getName = function() {
        return this.name
      }
    }
    
    Animal.prototype.setName = function(name) {
      this.name = name
    }
    
    function Dog(name) {
      Animal.call(this,name)
    }
    
    Dog.prototype = new Animal()
    
    const dog = new Dog('我是继承的狗')
    console.log(dog)
    console.log(dog.name)
    dog.setName('大黄狗')
    console.log(dog.name)
    

    缺点:使用子类创建对象时,其原型中会存在两份相同的属性和方法

  • ES6类继承extends

    class Animal{
      constructor(name,age){
        this.name = name
        this.age = age
      }
    
      get info() {
        return this.getInfo()
      }
    
      getInfo(){
        return this.name + this.age
      }
    }
    class Dog extends Animal {
      constructor(name,age,height) {
        super(name,age)
        this.height = height
      }
    
      get fullInfo(){
        return this.getFullInfo()
      }
    
      getFullInfo(){
        return this.name + this.age + this.height
      }
    }
    // const animal = new Animal('dog',12)
    // console.log(animal.info)
    
    const dog = new Dog('big dog',55,180)
    console.log(dog.fullInfo)
    console.log(dog)
    

    extends关键字主要用于类声明或者类表达式中,以创建一个子类。其中constructor表示构造函数,一个类中只能有一个构造函数。有多个会报错SyntaxError,如果没有显示的创建则会默认添加constructor方法

相关文章

  • JavaScript 常用继承方式

    JavaScript 常用继承方式 原型链继承构造函数,原型,实例之间的关系:每个构造函数之间都有一个原型对象,原...

  • es5的部分继承以及es6的class

    一、JavaScript常用的原型继承方式 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承...

  • 继承

    原型继承原型继承的基本形式: -> 原型继承是JavaScript中最常用的一种继承方式。-> 子类B想要继承父类...

  • 前端面试题目(二)

    javascript对象的几种创建方式 javascript继承的6种方法 详情:[JavaScript继承方式详...

  • JavaScript对象继承的常用方式

    前言 面向对象编程的一个重要方面是对象继承. 继承的对象拥有被继承对象的所有属性和方法, 这对复用代码是非常有用的...

  • 005|JavaScript ES6新特性之Classes

    在过去,需要像 053|JavaScript 继承详解 那样实现继承。JavaScript这种继承实现方式与其它面...

  • 深入理解javascript中的继承机制 之 12种继承模式总结

    之前我们介绍了多种javascript中的继承方式,最后我们开始总结概括这些继承方式,先将javascript中的...

  • JavaScript继承方式:

    文件路径:https://www.cnblogs.com/humin/p/4556820.html 1.原型链继承...

  • javaScript继承方式

    原型链继承基本思想就是让一个原型对象指向另一个类型的实例 function SuperType() {this.p...

  • JavaScript继承方式

    原型链继承 原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。 寄生式继承 创建一个仅用于封...

网友评论

      本文标题:JavaScript 常用继承方式

      本文链接:https://www.haomeiwen.com/subject/takboctx.html