在玩Babel.js并使用类进行扩展时,我意识到可能是区分公共类继承(Java,C#...)和原型的好方法(我不是真的在这里说类继承。
给予以下基类:
class Menu {
constructor(){}
render(){
this.addObjectsToStage();
}
addObjectsToStage() {
var objects = this.objects.getAllObjects();
for (var category in objects) {
if (objects.hasOwnProperty(category)) {
for (var type in objects[category]) {
if (objects[category].hasOwnProperty(type))
this.stage.addChild(objects[category][type]);
}
}
}
}
}
及其子类:
class MainMenu extends Menu{
constructor(stage, options) {
super();
this.stage = stage;
this.objects = new MenuObjects(options);
}
}
现在我要指出的是超类菜单正在调用此属性。对象 .getAllObjects()( in function“addObjectsToStage “)。
在“通用”面向对象语言中,您将无法访问刚创建子类实例时定义的属性。因此,在我看来,这是继承风格差异的一个重要标志。
所以我现在想知道的是,如果我说得对或错了!
答案 0 :(得分:0)
我不喜欢java或c#等语言中的类继承。但是你的例子将在javascript中运行。但正如评论中所述,它仅在Menu实例是MainMenu实例时才有效。
我看到许多java开发人员在javascript中加入,并且不了解javascrpit的自由。他们需要并希望工具告诉他们他们写的是否有效。这就是为什么我们看到越来越多的子语言建立在javascript之上以获得"类继承"感觉。但这不是javascript的工作方式。因此,他们更好地学习和阅读关闭,功能范围和原型设计。 Javascrpit非常简单,它迫使您编写好的逻辑代码。
所以我的答案是:是的,你很好。这是阶级和原型继承之间差异的重要标志。