4

JS で継承がどのように機能するかを理解しようとしています。クラスがあるとします:

Class = function () {
    this.A = 'A';
    this.B = 'B';
};

そして私たちはそれを拡張しようとしています

SubClass = function () {};
SubClass.prototype = new Class();

A継承後のプロパティは、プロトタイプに属しているため、Bのすべてのインスタンスに共通であることを正しく理解していますか? はいの場合、プロトタイプの一部にならないようSubClassにどのようClassに拡張できますか?AB

UPD: andをClass使用しているため、サブクラスで宣言できないことに注意してください。AB

前もって感謝します!

4

2 に答える 2

3

私が望むのは、AとBをアクセス可能にし、各「インスタンス」に固有のものにすることだけです

これを行う一般的な方法は、パラメーターを渡してプロパティに割り当てることです。callその後、スーパークラスを参照するために使用できます。言い換えると:

function Person( name, age ) {
  this.name = name;
  this.age = age;
}

function Student( name, age, grade ) {
  Person.call( this, name, age ); // call super-class with sub-class properties
  this.grade = grade;
}

Student.prototype = new Person();
Student.prototype.constructor = Student;

var roger = new Student( 'Roger', 18, 'A+' );
于 2012-11-14T09:54:20.353 に答える
1

以下を定義せずに、親クラスでプロパティを使用できます。

Class = function () {
   this.sum = function() {
       return this.a+this.b;    
   }
};

SubClass = function () {
    this.a = 5;
    this.b = 6;
}; 

SubClass.prototype = new Class();

var z = new SubClass();
z.sum(); //11

別の方法: プロパティを作成するプロトタイプで関数を作成します。

Class = function () {   
    this.makeAB = function() { //called with context of SubClass
        this.A = 'A';
        this.B = 'B';        
    }
};

SubClass = function () { this.makeAB() }; 
SubClass.prototype = new Class();

var z = new SubClass();
z.A = 'AAA';
z.B = 'BBB';

var z2 = new SubClass();

console.log(z)
console.log(z2)
于 2012-11-14T09:55:47.130 に答える