JavaScript類の継承

3047 ワード

  • Object.create()実装シングル
  •         //  superclass   
            function Person(first, last) {
                this.first = first
                this.last = last
            }
    
            Person.prototype = {
                fullName: function() {
                    console.log(this.first + ',' + this.last)
                },
                fullNameReversed: function() {
                    console.log(this.first + this.last)
                },
                sayHello: function(str) {
                    alert(str)
                },
            }
    
            //  subclass    
            function cuteGirl(args) {
                Person.apply(this, args)
                //       Person this       cuteGirl 
            }
    
            //  subclass extends superclass        
            cuteGirl.prototype = Object.create(Person.prototype)
            //         ,  Person.prototype          
            cuteGirl.prototype.constructor = cuteGirl
            //    cuteGirl    ,       cuteGirl.prototype
    
            var xiaohong = new cuteGirl(['xiao', 'hong'])
    
            xiaohong.sayHello('hhh')  //        
            xiaohong.fullName()  //    xiao,hong
            xiaohong.fullNameReversed()  //    xiaohong
    
  • Object.assign()多相続
  • を実現しました.
            //  superclass
            function Person (first, last) {
                this.first = first
                this.last = last
            }
    
            Person.prototype = {
                fullName:function() {
                    console.log(this.first + ',' + this.last)
                },
                fullNameReversed:function() {
                    console.log(this.first + this.last)
                },
                sayHello:function (str) {
                    alert(str)
                },
            }
    
            function Girl (sex) {
                this.sex = sex
            }
    
            Girl.prototype = {
                saySex:function () {
                    console.log(this.sex)
                }
            }
    
    
            //  subclass
            function cuteGirl (args, sex) {
                Person.apply(this, args)
                Girl.call(this, sex)
            }
    
            //  subclass extends superclass
            // cuteGirl.prototype = Object.create(Person.prototype)
            Object.assign(cuteGirl.prototype, Person.prototype, Girl.prototype)
            cuteGirl.prototype.constructor = cuteGirl
    
            var xiaohong = new cuteGirl(['xiao','hong'], '  ')
    
            xiaohong.sayHello('hhh')        //      
            xiaohong.fullName()             //  xiao,hong
            xiaohong.fullNameReversed()     //  xiaohong
            xiaohong.saySex()               //    
    
    
    Object.assign()メソッドは、列挙可能な属性のすべての値を1つまたは複数のソースオブジェクトから対象オブジェクトにコピーするために使用されます.ターゲットオブジェクトに戻ります.Object.assign(targt,…sources)の2つのパラメータは、最初はターゲットオブジェクトであり、後はソースオブジェクトであり、この方法の戻り値はターゲットオブジェクトである.Object.assign(cuteGirl.prototype, Person.prototype, Girl.prototype)このコードの役割はPersonとGirlのプロトタイプをすべてcuteGirlに加えることです.
    また、第一のシングル継承はcuteGirl.prototype = Object.create(Person.prototype)を使わずに、直接cuteGirl.prototype = Person.prototype)を使ってもいいです.