js継承

2124 ワード

原型引継ぎ
  • は、サブタイプのプロトタイプを親タイプに設定する例
  • を示している.
  • 欠点:
  • サブクラスnewの例では、親の属性は分離されておらず、相互に影響を与え、同じアドレスを参照します.
  • サブクラスは、親タイプにパラメータ
  • を伝えることができません.
    function Parent() {
       this.name = 'parent' 
    }
    
    Parent.prototype.getName = function() { 
        console.log(this.name)
    }
    
    function Child() {
        this.name = 'child'
    }
    
    Child.prototype = new Parent() //         
    
    let child = new Child()
    
    コンストラクタ継承
  • は、call()法で継承し、親クラスの属性と方法をサブクラスで継承し、親クラスにサブクラスがパラメータ
  • を伝えることができると説明している.
  • 欠点:親のプロトタイプの属性とプロトタイプの方法を継承できない
  • function Parent() {
        this.name = 'parent' 
    }
    
    Parent.prototype.getName = function() { 
        console.log(this.name)
    }
    
    function Child() {
        Parent.call(this
        this.name = 'child'
    }
    
    let child = new Child()
    
    コンビネーション継承
  • は上記の構造関数とプロトタイプ継承の機能を組み合わせる.
  • 欠点:call()方法はすでに親類のすべての属性を手に入れました.後に原型を使う時も父類のすべての属性があります.同じアドレスの問題を解決できませんでした.
    function Parent() {
       this.name = 'Parent' 
    }
    
    Parent.prototype.getName = function() { 
        console.log(this.name)
    }
    
    function Child(value) {
        Parent.call(this) //       
        this.name = 'Child'
    }
    
    Child.prototype = new Parent() //     
    
    let child = new Child()
    
    寄生グループ引き継ぎ
  • は、父親の種類this宣言の属性/方法を引き継ぐために、構造関数(call)を借りることにより、
  • を使用する.
  • サブタイププロトタイプを親タイププロトタイプとして設定し、親タイプのプロトタイプ宣言の属性/方法
  • を継承します.
  • (注意)サブタイプのコントローラは、サブクラス
  • を指します.
    function Parent() {
        this.name = 'parent'
    }
    
    Parent.prototype.getName = function() { 
        console.log(this.name)
    }
    
    function Child() {
        Parent.call(this)
        this.name = 'child
    }
    
    Child.prototype = Parent.prototype
    // Child.prototype = Object.create(Parent.prototype)
    Child.prototype.contructor = Child
    
    let child = new Child()
    
    es 6クラス引継ぎ
  • 寄生結合を用いて
  • を実現した.
    class Parent {
        contructor() {
            this.name = 'parent'
        }
        
        getName() {
            console.log(this.name)
        }
    }
    
    class Child extends Parent {
        contrucotr() {
            super()
            this.name = 'child'
        }
    }
    
    let child = new Child()