在JavaScript中,如何访问超类实例的属性?例如,我希望超类实例的“支柱”设置为"true",但此代码创建子类实例的“支柱”并将其设置为"true",将超类实例的“支柱”设为false:
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做B. SubClass做A“,这不是期望的结果。我如何正确地设置“道具”的价值,使他们都做"A"?我不是试图在子类实例中创建一个新属性,而是要访问超类实例中的现有属性。
谢谢!
此外,您能从子类构造函数中访问超类的实例属性吗?还是需要先实例化子类?
发布于 2015-08-16 21:33:32
SubClass.prototype.doStuff = function() {
SuperClass.prototype.doStuff();您没有为超类提供任何上下文,因此该函数没有对当前对象进行操作(即this将是错误的)。
相反,试着:
SubClass.prototype.doStuff = function() {
SuperClass.prototype.doStuff.call(this);这给了我想要的输出:
SuperClass does A.
SubClass does A.https://stackoverflow.com/questions/32040111
复制相似问题