原生jsが継承を実現するいくつかの方式(call()、原型継承、構造関数継承)

2801 ワード

継承を実現するには、基本的なオブジェクト向け知識とプロトタイプチェーン知識が不可欠である.今日は簡単に話して、後で詳しく話す時間があります.
     1.継承の目的:属性と方法を共有することである.
     2.継承の実現方法:プロトタイプチェーンは継承を実現する主な方式である.役割ドメインを変更することも、call()またはapply()である.
     3.コンストラクション関数式継承:(属性を継承)親クラスのコンストラクション関数をサブクラスの関数体で実行し、callによってthisがサブクラスを指すインスタンスを変更します.
     4.プロトタイプ継承:子クラスのプロトタイプを親クラスのインスタンスに指向する.
今日はこの2つの方法について簡単にお話しします.
       
 function Father(name, age) {
            this.name = name;
            this.age = age;
            this.sex = function () {
                console.log('   ');
            };
            console.log('    ');          //      
            console.log(this.name);          //   123
        };

        
        function Son(name, sex) {
            Father.call(this, name);
        };

        Son('123');

説明:以上のニーズはSonメソッドにFatherメソッドの属性とメソッドを共有させたいことです.Sonメソッドの内部でFatherメソッドの実行時の役割ドメインを変更することができます.Fatherメソッドが実行されると、内部のthisがSonメソッドになってしまうという意味です.したがって、以下のSonメソッドが実行され、正常に出力することもできます.これによりSonメソッドにFatherメソッドを共有させる属性とメソッドが実現される.
2つ目の方法:
function Father(name, age) {
            this.name = name;
            this.age = age;
            this.sex = function () {
                console.log('   ');
            };
            console.log('    ');            //     
            console.log(this.name);            //   123
        };

        
        function Son(name, sex) {
            
        };
        
        Son.prototype = Father.prototype;
        Son.prototype.constructor('123');


        //   Son.prototype.constructor;
        var child = Son.prototype.constructor;
        console.log(child)                      //  ƒ Father(name, age) {
                                                          this.name = name;
                                                          this.age = age;
                                                          this.sex = function () {
                                                            console.log('   ');
                                                        };
                                                          console.log('    ');
                                                      …

説明:目的は同様にSonメソッドにFatherメソッドの属性とメソッドを共有させることである.しかし、この場合はプロトタイプチェーンの継承により実現する.これは一定のプロトタイプチェーンの知識を理解しなければ理解できない.簡単に言えばSonメソッドのプロトタイプオブジェクトをFatherメソッドのプロトタイプオブジェクトに向ける.関数のプロトタイプオブジェクトはconstructorによって構造関数自体にアクセスできるからである.だからprototype.consturctorは実は指向するFather方法そのものである.まだ理解していないなら、私は上ですでに出力しました.一目でわかる
 
まとめ:もちろんnewの例はありません.実は原理は同じです.今日も言いきれないから、また今度にしましょう.実は継承に関わるものがたくさんあります.一言では言いきれない.例えばcall()の使い方、関数thisの指向問題、プロトタイプチェーン知識.どれが欠けても継承がよく理解できない.実は継承の目的と方法を知っている限り.この二つの点から継承を理解する.理解しやすいはずです.今日はまずこんなにたくさん話しましょう.暇があってよく探求して継承します.