在JavaScript中,如何访问超类'实例的属性?

Pol*_*unk 3 javascript inheritance class

在JavaScript中,如何访问超类'实例的属性?作为一个例子,我希望超类'实例的"prop"设置为"true",但是这段代码创建并将子类'instance'的"prop"设置为"true",留下超类'实例'的支柱"假的:

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();
Run Code Online (Sandbox Code Playgroud)

目前,输出是"SuperClass确实B. SubClass做A.",这不是期望的结果.如何正确设置"prop"的值,使它们都"A"?我不是想在子类'实例中创建一个新属性,我想访问超类'实例中的现有属性.

谢谢!

另外,你可以从子类的构造函数访问超类'实例的属性吗?或者是否需要首先实例化子类?

Jam*_*lin 5

SubClass.prototype.doStuff = function() {
    SuperClass.prototype.doStuff();
Run Code Online (Sandbox Code Playgroud)

你没有给超类任何上下文,所以函数不作用于当前对象(this即将是错误的).

而是尝试:

SubClass.prototype.doStuff = function() {
    SuperClass.prototype.doStuff.call(this);
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出:

SuperClass does A.
SubClass does A.
Run Code Online (Sandbox Code Playgroud)