javascript - ES6 类 : Is this a proof for prototype extending another one?

标签 javascript class inheritance prototype ecmascript-6

在使用 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/

相关文章:

javascript - AngularJS:基于变量计数输出 HTML

python - 在定义一个python类时,如何在其中设置一个随机变量?

c++ - 如何从主类之外的嵌套类编写实际代码

css - 多个 DIV,相同的类,如何减少 css 标记?

JavaScript:为什么 Object.hasOwnProperty 方法的行为是这样的?

javascript - 如何增加div的点击面积?

java - node.js 准备好替换服务器任务了吗?

php - php构造函数中的父/子类型提示?

javascript - 可以对继承建模吗?

javascript - 如何在按键时将字符附加到 JavaScript 中文本框/文本区域中的选定文本