js原型継承の二つの方法の対比紹介


実際のプロジェクトでは、私たちは通常、オブジェクトを作成するためのコンストラクタを使用して、いくつかの一般的な方法をそのプロトタイプオブジェクトに追加します。対象を直接的に実例化するか、親として扱うか、対象を明確にして継承します。
継承する時には2つのよく使われている方式があります。今日はちょっと検討してみます。
1,Prottypeを継承する:

//
 function Person(name){
    this.name = name;
};

 //
 function Student(sex){
  Person.apply(this,arguments); //
  this.sex=sex;
 };

Personの原型オブジェクトでStudentの原型オブジェクトをカバーする;前述のオブジェクトの割当値は実質的に参照賦課ですので、Student.prototypeのどの修正もPerson.prototypeの中に反映されます。すなわち、子供は親に影響を与えます。
下を見てください

Student.prototype = Person.prototype; // ,Student.prototype.constructor Person, ? Person.prototype.constructor Person, , Student.prototype.constructor Person
Student.prototype.constructor = Student;  //  Student.prototype.constructor Person
2,継承例:

Student.prototype.add=function(){alert("add")};
Person.prototype.add();// add
は、StudentのプロトタイプオブジェクトをPersonの例でカバーする。例を作成しましたが、前のような表示よりメモリが無駄になってしまいましたが、この場合はStudent.prototype上のいかなる修正もPerson.prototypeに反映されません。つまり、子供は親に影響を与えません。
3、制御対象を利用して1と2の長所を組み合わせ、欠点をなくす。

Student.prototype = new Person();  // , (); new Person;
2 Student.prototype.constructor = Student;
Fは空のオブジェクトで、上にはいくつかのプロトタイプの方法しかありません。実際の例ではメモリの占有率が少ないです。また、サブクラスの親への影響も離れています。