JavaScript対象(パッケージ、継承、多状態)に向けて様々な方法で完全な総括を実現します.

17487 ワード

JavaScript対象(パッケージ、継承、多状態)に向けて様々な方法で完全な総括を実現します.
  • JavaScriptは対象パッケージに向かって多形多様な方式を継承し、完全な総括を実現する.
  • パッケージ
  • 継承
  • 多形性
  • 関数再負荷
  • 多形実現
  • 1.パッケージ
    パッケージとは、抽象的なデータとデータの操作を一緒にパッケージ化し、データが内部に保護され、プログラムの他の部分は許可された操作(メンバー方法)によってのみデータを操作することができます.パッケージを作成するには、4つの方法で実装することができます.1.オブジェクトの字面量{key:value、key:value…}は1回のオブジェクトしか作成できません.多重性が悪いので、複数のオブジェクトを作成するには、コードの冗長度が高すぎる2.構造関数var oj=new Objectを内蔵します.obj.name="csxiaoyao"3.簡易工場関数function createObj(name,company){var oj=new Object();obj.name=name;return obj;}4.自定構造関数
    function Person(name, agei){ 
        // public
        this.name = name;//             
        // private
        var age = agei;//            
        this.getAge = function(){//getter
            return age;
        }
        this.setAge = function(a){//setter
            age = a;
        }
    }
    Person.prototype.show = function(){
        var str = this.name + " "+ this.getAge();
        //    : 1.  this         2.                 
        // var str = name + " "+ age;
        return str;
    }
    //    new       ,  this  window
    var p1 = new Person('csxiaoyao', 25);
    //             (undefined)
    console.log(p1.name + " " + p1.age);//csxiaoyao undefined
    //      
    p1.setAge(20);
    console.log(p1.getAge());//20
    //      
    console.log(p1.show());//csxiaoyao 20
    var p2 = new Person();
    //           
    p1.n = "sunshine";
    console.log(p1.n);//sunshine
    JSパッケージは二つの状態しかなく、一つは公開であり、一つは私有である.
    「構造関数」と「プロトタイプ」でメンバーメソッドの違いを追加します.1.プロトタイプによって割り当てられた関数(引用タイプでいいです.)すべてのオブジェクトを共有します.プロトタイプによって割り当てられた属性(基本タイプ)は独立しています.3.すべてのオブジェクトに同じ関数を使用したいなら、プロトタイプに関数を追加し、メモリを節約することを提案します.4.プロトタイプを通じてすべてのオブジェクトに追加する方法です.場所クラスのプライベート属性と方法にアクセスできませんでした.
    2.継承
    継承は、コード多重化を解決し、プログラミングを人間の思考に近づけます.複数のクラスが同じ属性(変数)と方法を持っている場合、これらのクラスから親類を抽象化して、これらの同じ属性と方法を定義します.すべてのサブクラスはこれらの属性と方法を再定義する必要はなく、親類の属性と方法を継承する必要があります.継承は、5つの方法で行うことができます.1.混入式継承は、for inエルゴードオブジェクト1の属性を使用して、他のオブジェクト2にすべての属性を追加します.古典的にvarオブジェクト1=Object.reateを継承します.作成されたオブジェクト1は、オブジェクト2から継承され、Object.reateメソッドの互換性の問題を解決する必要があります.3.原型継承(1)利用対象の動的特性は、原型オブジェクトにメンバー(2)を追加し、直接に原型オブジェクトを置換する必要があります.
    function Person(name, age){
        this.name = name;
        this.age = age;
    }
    //1.          (         )          
    Person.prototype.sayHello = function () {
        console.log("sayHello1");
    }
    // p1      
    var p1 = new Person("csxiaoyao",25);
    p1.sayHello();//sayHello1
    //2.        
    var parent = {
        sayHello : function () {
            console.log("sayHello2");
        }
    }
    Person.prototype = parent;
    var p2 = new Person("csxiaoyao",25);
    p2.sayHello();//sayHello2
    ★4.オブジェクトの塗りつぶし
    function Stu(name, age){
        this.name = name;
        this.age = age;
        this.show = function(){
            console.log(this.name + " " + this.age);
        }
    }
    function MidStu(name, age, money) {
        this.stu = Stu;//       Stu    ,   stu  
        this.stu(name, age);//      ,         name、age、show
        this.payFee = function(){//      
            console.log("  " + money * 0.8);
        }
    }
    function Pupil(name, age, money) {
        this.stu = Stu;
        this.stu(name, age);
        this.payFee = function(){
            console.log("  " + money * 0.5);
        }
    }
    var midStu = new MidStu("csxiaoyao", 13, 10000);
    var pupil = new Pupil("sunshine", 10, 10000);
    midStu.show();//csxiaoyao 13
    midStu.payFee();//  8000
    pupil.show();//sunshine 10
    pupil.payFee();//  5000
    ★5.call/appy(おすすめ)
    function Stu(name,age){
        this.name=name;
        this.age=age;
        this.show=function(){
            console.log(this.name+" "+this.age);
        }
    }
    function MidStu(name,age){
        Stu.call(this,name,age);//        
        //Stu.apply(this,[name,age]); 
        this.pay=function(fee){
            console.log("  :"+fee*0.8);
        }
    } 
    function Pupil(name,age){ 
        Stu.call(this,name,age);
        this.pay=function(fee){
            console.log("  :"+fee*0.5);
        }
    }
    var midstu = new MidStu("csxiaoyao",15); 
    var pupil = new Pupil("sunshine",12); 
    midstu.show();// csxiaoyao 15
    midstu.pay(100);//   :80
    pupil.show();// sunshine 12
    pupil.pay(100);//   :50
    3.多形性
    3.1関数の再負荷
    関数の再負荷は多状態の基礎であり、JS関数は多状態をサポートしていません.実はJS関数は無状態で、任意の長さ、タイプのパラメータリストをサポートしています.複数の同名関数が同時に定義されている場合は、最後の関数に準じる.
    //js        、       
    function Person(){
        this.test = function (){
            if(arguments.length==1 && (typeof arguments[0])==="string"){
                this.show1(arguments[0]);
            }else if(arguments.length==1 && (typeof arguments[0])==="number"){
                this.show2(arguments[0]);
            }else if(arguments.length==2){
                this.show3(arguments[0],arguments[1]);
            }else if(arguments.length==3){
                this.show4(arguments[0],arguments[1],arguments[2]);
            }
        }
        this.show1=function(a){
            console.log("function(string):"+a);
        }
        this.show2=function(a){
            console.log("function(number):"+a);
        }
        this.show3=function(a,b){ 
            console.log("function(a,b):"+a+","+b); 
        }
        function show4(a,b,c){ 
            console.log("function(a,b,c):"+a+","+b+","+c); 
        }
    } 
    var p1=new Person();
    p1.test("a");//function(string):a
    p1.test(1);//function(number):1
    p1.test("sun","shine");//function(a,b):sun,shine
    // p1.test("sun","shine","studio");//   is not a function
    3.2多形実現
    多形とは、1つの参照(タイプ)が異なる場合の複数の状態(親への参照によって、異なるサブクラスで実装される方法を呼び出す)を意味する.
    // Master 
    function Master(name){
        this.nam=name;
    }
    //         
    Master.prototype.feed=function (animal,food){
        console.log("  "+animal.name+"   "+ food.name);
    }
    //   
    function Food(name){
        this.name=name;
    }
    function Fish(name){
        this.food=Food;
        this.food(name);
    }
    function Bone(name){
        this.food=Food;
        this.food(name);
    }
    //   
    function Animal(name){
        this.name=name;
    }
    function Cat(name){
        this.animal=Animal;
        this.animal(name);
    }
    function Dog(name){
        this.animal=Animal;
        this.animal(name);
    }
    var cat=new Cat(" ");
    var fish=new Fish(" ");
    var dog=new Dog(" ");
    var bone=new Bone("  ");
    //      
    var master=new Master("csxiaoyao"); 
    master.feed(dog,bone);//        
    master.feed(cat,fish);//