javascript - 在 JavaScript 中,如何访问父类(super class)实例的属性?

标签 javascript class inheritance

在 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/

相关文章:

PHP - 两个类,彼此正确对话

python - 重命名外部模块类方法

c++ - 类构造函数和元素

java - 当我使用尚未编写的父类(super class)的方法时,Java 会发生什么情况?

javascript - 弹出式表格不起作用

javascript - 如何在 JavaScript 中单击外部时禁用文本框

java - 面向对象 : inheritance with extends

Typescript 父类对子类的类型保护

javascript - Twitter API 调用仅使用 javascript 获取 OAuth 的 access_token

javascript - 当 loadonce 设置为 true 时分页不起作用