我正在JavaScript中练习多态(第一次尝试),根据我在网上找到的不同示例。我知道在其他语言中,我可以从扩展类中访问超类的变量,并想知道如何在JavaScript中正确地执行此操作。下面的代码没有抛出任何错误(至少就Firefox的错误控制台而言),但是ExtendedClass
中的statement
未定义。
function MyClass() {
this.statement = "I'm a class with a method";
this.speak = function() {
alert(this.statement);
}
}
var mInstance = new MyClass();
mInstance.speak();
function ExtendedClass() {
Object.create(MyClass);
this.speak = function() {
alert(this.statement+" and I extend a class");
}
}
var eInstance = new ExtendedClass();
eInstance.speak();
我能否从
ExtendedClass
访问statement
?这是实现多态的好方法吗?
ExtendedClass.prototype = Object.create(MyClass.prototype);
,那是什么意思?我不习惯使用prototype
或Object.create()
。 - asimesExtendedCLass.prototype
是对ExtendedClass类型原型链的引用,这就是JavaScript中控制继承的方式。在像JavaScript或C++这样的语言中,它没有确切的等价物,因为这些语言使用的是经典继承而不是原型继承。 - Ben McCormick