4

我试图了解继承在 JS 中是如何工作的。假设我们有一个类:

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

我们正在尝试扩展它

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

我是否正确理解在继承属性之后A并且B对于 的所有实例都是通用的SubClass,因为它们属于它的原型?如果是,如何Class扩展以便不成为原型的一部分?AB

UPD:注意Class使用Aand B,所以我不能在子类中声明它们。

先感谢您!

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 回答