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';
};