Javascriptは対象に向かって—継承します.

2875 ワード

前に述べたように、Javascriptはどのようにオブジェクト指向の特性を実現しますか?今はJavascriptを使ってオブジェクトに向かう「継承」の重要な機能を実現しますか?
【継承】字面では、子が親の代を継ぐものと理解されています.プログラミング言語では、継承は親からの方法や属性を継承し、それに応じて拡張します.このように間接的に多重化の効果を達成した. 
var parentClass1=function(name,age,sex){//    prantClass
	this.name=name;
    this.age=age;
    this.sex=sex;
}
var childrenClass=function(addr,Sg){//    childClass
    this.addr=addr;
    this.Sg=Sg;
    this.showInfo=function(){
    console.log("name:"+this.name);
    console.log("age:"+this.age);
    console.log("sex:"+this.sex);
    console.log("address:"+this.addr);
    console.log("Sg:"+this.Sg);
   }
}
childrenClass.prototype=new parentClass1("  "," ",26);//             parentClass1
var childObj=new childrenClass("    ","176cm");
childObj.showInfo();
以上のコードは親クラスのparent Class 1を定義しています.これはサブクラスを通じて親クラスを継承します.したがって、サブクラスでは親クラスの属性name、sex、ageに引用できます.ここで継承を実現する方式はJSのプロトタイプによって実現されます.
プロトタイプによって継承される問題があります.例の化学種を通じて父にデータを伝えることができないです.継承の際には、サブクラスのコンストラクタに値を割り当てることによって、父親のコンストラクタの割り当てを変更しなければならないならば、多重化の効果には及ばない.
Javascriptは柔軟性があるので、私達はappyまたはcall方法で実現できます.appyとcall方法は継承方法ではなく、コンテキスト環境を変えただけです.コードは以下の通りです
ar parentClass1=function(name,age,sex){//    prantClass
            this.name=name;
            this.age=age;
            this.sex=sex;
        }
var childrenClass=function(name,age,sex,addr,Sg){
            this.addr=addr;
            this.Sg=Sg;
            parentClass1.call(this,name,age,sex);//        call                
            this.showInfo=function(){
                console.log("name:"+this.name);
                console.log("age:"+this.age);
                console.log("sex:"+this.sex);
                console.log("address:"+this.addr);
                console.log("Sg:"+this.Sg);
            }
        }
        childrenClass.prototype=new parentClass1();//                 
        var childObj=new childrenClass("  "," ",26,"    ","176cm");
        childObj.showInfo();
以上の用法は継承用法のみであり、子類プロトタイプ属性を実例化しないで複数の父類を継承します.このような種類は最後のバインディングの父類しか継承できません.
マルチ継承の使い方は、本当の意味での継承ではなく、複数のオブジェクトの中の属性や方法をサブクラスにコピーするだけだと理解しています.実現コードは以下の通りです.
var m_extend=function(){
            var len=arguments.length,
                target=arguments[0],
                arg;//arg             
                for(var i=1;i
厳密にはJavascriptはプロトタイプチェーンを通じて多くの継承を実現できません.これはJavascriptプロトタイプチェーンが単一のプロトタイプであるため、Javascriptに複数のプロトタイプチェーンがあることができません.特定の属性または方法を検索する時はプロトタイプチェーンを通して上級レベルで検索するしかないです.原型と原型チェーンに関する文章を知ることができる興味があります.