Javascript 两个子类继承超类的属性,并且不';我没有失去视野

Javascript 两个子类继承超类的属性,并且不';我没有失去视野,javascript,inheritance,prototype,Javascript,Inheritance,Prototype,为了获得帮助,我将用一个例子来说明这个问题: var SuperClass = function() { this.propertieOfSuperClass = 'A'; this.init(); }; SuperClass.prototype.init = function() { console.log(this.propertieOfSuperClass); // ouput 'A'; }; 第1款: var SubClass1 = function() { thi

为了获得帮助,我将用一个例子来说明这个问题:

var SuperClass = function() {
  this.propertieOfSuperClass = 'A';

  this.init();
};

SuperClass.prototype.init = function() {
 console.log(this.propertieOfSuperClass); // ouput 'A';
};

第1款:

var SubClass1 = function() {
  this.methodOfSubClass1();
};

SubClass1.prototype.methodOfSubClass1 = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};
第2款:

var SubClass2 = function() {
  this.methodOfSubClass2();
};

SubClass2.prototype.methodOfSubClass = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};
我希望能够有这个我设置属性的超类和另外两个子类,我可以访问超类的属性,但不会失去作用域

我试图在我的超类init方法中使用:

SubClass1.call(this);
SubClass2.call(this);
这将使
超类的属性可以访问,但是子类的属性将失去其作用域,因此我不能调用
methodOfSubClass1
methodOfSubClass2
,因为它们不存在于
超类中

我该怎么做呢?

简单的做法:

var SuperClass = function() {
  this.propertieOfSuperClass = 'A';
  this.init();
};

SuperClass.prototype.init = function() {
 console.log(this.propertieOfSuperClass); // ouput 'A';
};

var SubClass1 = function() {
  SuperClass.call(this); // Call parent constructor
  this.methodOfSubClass1();
};
SubClass1.prototype = Object.create(SuperClass.prototype); // Inheritance

SubClass1.prototype.methodOfSubClass1 = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};

var SubClass2 = function() {
  SuperClass.call(this); // Call parent constructor
  this.methodOfSubClass2();
};
SubClass2.prototype = Object.create(SuperClass.prototype); // Inheritance

SubClass2.prototype.methodOfSubClass2 = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};
var SuperClass = function SuperClass() {
  this.propertieOfSuperClass = 'A';

  this.init();
};

SuperClass.prototype.init = function() {
 console.log(this.propertieOfSuperClass); // ouput 'A';

 SubClass.call(this);
};
他们:

它们在子类中:

var SubClass = function() {
  console.log(this); // output will be the SuperClass

  this.methodOfSubClass();
};
现在重要的部分是:

SubClass.prototype.constructor = SubClass;

SubClass1.prototype.methodOfSubClass = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};

您也可以对子类2执行同样的操作。

只需在代码exmaple中意识到,在调用父类的init方法以及它们各自的方法时,每个子类都会记录两次“A”。您到底遇到了什么问题?
var SubClass = function() {
  console.log(this); // output will be the SuperClass

  this.methodOfSubClass();
};
SubClass.prototype.constructor = SubClass;

SubClass1.prototype.methodOfSubClass = function() {
  console.log(this.propertieOfSuperClass); // output 'A';
};