js中のコンストラクション、プロトタイプ、および実用化対象

2282 ワード

1,コンストラクタの作成対象によるメモリの無駄とプロトタイプの導入
 function Person(name,age){
        this.name = name;
        this.age = age;
        this.introduce = function(){
            alert('  '+this.name)
        };
    }



    var  p1 = new Person('  ',12);

    var  p2 = new Person('  ',12);
    var  p3 = new Person('  ',12);
//.....................
上記のようにPersonオブジェクトをどんどん実装していくと、実際化するたびにintrduce方法のために新しいメモリ空間を開発していく必要があります.このようにしてメモリ空間を無駄にしてしまいます.
次の方法を考えてみます.外部では方法のために関数を書いて、オブジェクトの中の方法をこの関数に指し示します.オブジェクトの呼び出し方法の場合、属性を通じて方法の関数がある住所を指します.
複数のオブジェクトを共有する方法関数を実現することができます.
 function introduce(){
        alert('  '+this.name);
    }
    // var introduce = '  ';  //                 ,   
    function Person(name,age){
        this.name = name;
        this.age = age;
        this.introduce = introduce;
    }
    //     
    var  p1 = new Person('  ',12);
    var  p2 = new Person('  ',12);
    p1.introduce(); // 5           

    // console.log(p1.introduce == p2.introduce); //true
上のコードは依然として欠陥があります.パッケージの対象は他の人がソースコードを見られない場合、方法関数名と同じ変数を定義しています.このプログラムはエラーとなります.プログラムは正常に実行できません.
プロトタイプを紹介します.
プロトタイプは各関数オブジェクトに存在し、関数オブジェクトの属性です.    関数名.prototype.メソッド名=function(){関数体}    (もちろん、私たちはこのように構造関数に属性を追加することもできます.)
 function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.introduce = function(){//prototype    ,  
        alert('  '+this.name);
    };

    //     
    var  p1 = new Person('  ',12);
    var  p2 = new Person('  ',12);
    p1.introduce();

    console.log(p1.introduce == p2.introduce); //true
3,コンストラクタ  原型  オブジェクトを具体化   間の関係
コンストラクタに属性の名前があります.  プロトタイプ  プロトタイプということは、プロトタイプそのものが対象となり、その内部に保存されています.  constructorコンストラクタは、ユーザー定義の共有が必要な属性と方法を使用しています.
プロトタイプの原型オブジェクトのconstructor属性はプロトタイプが自分のいる構造関数を指します.
例示的な対象の中に、___uという名前があります.プロト.属性は、同時にオブジェクトであり、正確には  コンストラクタの中のprototypeオブジェクトがあるメモリ空間を指しています.  __proto_==Prototype、
でもどぅプロト.は、標準化されていないオブジェクトです.  その内部の方法は直接に親レベルのオブジェクトに呼び出されます.  上のコードのように  introduceの方法は_u u u u u 0026 quot;にあります.プロト.対象の中にプロト.はp 1の属性で、通常の呼び出し方式は  p 1._u uプロト.introduce()   _によるプロト.の非標準化、p 1.introduce()  呼び方もいいです.