在 JavaScript 中,如何访问父类(super class)实例的属性?例如,我想将父类(super class)实例的“prop”设置为“true”,但此代码创建子类实例的“prop”并将其设置为“true”,而留下父类(super class)实例的“prop” “为假:
var SuperClass = function() {
this.prop = true;
}
SuperClass.prototype.doStuff = function() {
if (this.prop) {
console.log('SuperClass does A.');
}
else {
console.log('SuperClass does B.');
}
}
SuperClass.prototype.load = function() {
this.prop = false;
}
SuperClass.prototype.setProp = function(val) {
this.prop = val;
}
function SubClass() {
SuperClass.call(this);
}
SubClass.prototype = Object.create(SuperClass.prototype);
SubClass.prototype.constructor = SubClass;
SubClass.prototype.doStuff = function() {
SuperClass.prototype.doStuff();
if (this.prop) {
console.log('SubClass does A.');
}
else {
console.log('SubClass does B.');
}
}
SubClass.prototype.load = function() {
SuperClass.prototype.load();
}
var anObject = new SubClass();
anObject.load();
anObject.setProp(true);
anObject.doStuff();
目前,输出是“SuperClass does B. SubClass does A.”,这不是想要的结果。如何正确设置“prop”的值,使它们都做“A”?我不是要在子类实例中创建新属性,我想访问父类(super class)实例中的现有属性。
谢谢!
此外,您能否从子类的构造函数访问父类(super class)实例的属性?还是需要先实例化子类?
最佳答案
SubClass.prototype.doStuff = function() {
SuperClass.prototype.doStuff();
您没有为父类(super class)提供任何上下文,因此该函数不会作用于当前对象(即 this
将是错误的)。
改为尝试:
SubClass.prototype.doStuff = function() {
SuperClass.prototype.doStuff.call(this);
这给了我想要的输出:
SuperClass does A.
SubClass does A.
关于javascript - 在 JavaScript 中,如何访问父类(super class)实例的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040111/