在玩Babel.js和对类进行一些扩展时,我意识到了一些可能是区分公共类继承的好方法(C#,Java.)以及prototype (我在这里并不是说类)继承。
将以下内容提供给基类:
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);
}
}
现在我要指出的是,超类this.objects.getAllObjects()菜单正在调用属性(函数"addObjectsToStage")。
在面向对象的“公共”语言中,您将无法访问仅在创建子类实例时定义的属性。因此,在我看来,这是继承风格不同的一个重要标志。
所以我现在想知道的是我到底是对的还是完全错的!
发布于 2016-03-04 13:38:14
我不擅长java或c#等语言中的类继承。但是您的示例将在javascript中起作用。但正如注释中所述,只有当菜单实例是MainMenu实例时,它才能工作。
我看到许多java开发人员在javascript中工作,并且不理解javascrpit的自由。他们需要并且想要工具来告诉他们他们所写的东西是否有效。这就是为什么我们看到越来越多的子语言构建在javascript之上,具有“类继承”的感觉。但这不是javascript的工作方式。因此,他们更好地学习和阅读关于闭包、函数范围和原型的知识。Javascrpit非常简单,它迫使您编写好的逻辑代码。
所以我的答案是:是的,你说得很对。这是类继承和原型继承之间区别的一个重要标志。
https://stackoverflow.com/questions/35805637
复制