在使用 Babel.js 并对类进行一些扩展时,我意识到一些东西可能是区分普通类继承(Java、C#...)和原型(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);
}
}
现在我想指出的是父类(super class) Menu 正在调用属性 this.objects.getAllObjects()(在函数“addObjectsToStage”中“)。
在“通用”的面向对象语言中,您将无法访问在创建子类实例时刚刚定义的属性。因此,在我看来,这是继承风格差异的重要标志。
所以我现在想知道我是完全正确还是完全错误!
最佳答案
我不擅长java或c#等语言的类继承。但是您的示例将在 javascript 中运行。但正如评论中所说,只有当 Menu 实例是 MainMenu 实例时它才会起作用。
我看到许多 java 开发人员使用 javascript 并且不了解 javascrpit 的自由。他们需要并且想要能够告诉他们所写内容是否有效的工具。这就是为什么我们看到越来越多的子语言构建在 javascript 之上以具有“类继承”的感觉。但这不是 javascript 的工作方式。所以他们更好地学习和阅读闭包、函数范围和原型(prototype)设计。 Javascrpit 非常简单,它迫使您编写良好的逻辑代码。
所以我的答案是:是的,你说得对。这是类继承和原型(prototype)继承之间区别的一个重要标志。
关于javascript - ES6 类 : Is this a proof for prototype extending another one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805637/