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"?我不是想在子类'实例中创建一个新属性,我想访问超类'实例中的现有属性.
谢谢!
另外,你可以从子类的构造函数访问超类'实例的属性吗?或者是否需要首先实例化子类?
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)