繁体   English   中英

ES6课程:这是原型扩展另一个的证明吗?

[英]ES6 Classes: Is this a proof for prototype extending another one?

在玩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);
  }
}

现在我要指出的是超级菜单调用了这个属性。 objects .getAllObjects()( 在函数“addObjectsToStage”中 )。

在“通用”面向对象语言中,您将无法访问刚创建子类实例时定义的属性。 因此,在我看来,这是继承风格差异的重要标志。

所以我现在想知道的是,如果我说得对或错了!

我不喜欢java或c#等语言中的类继承。 但是你的例子将在javascript中运行。 但正如评论中所述,它仅在Menu实例是MainMenu实例时才有效。

我看到许多java开发人员在javascript中加入,并且不了解javascrpit的自由。 他们需要并希望工具告诉他们他们写的是否有效。 这就是为什么我们看到越来越多的子语言建立在javascript之上以获得“类继承”的感觉。 但这不是javascript的工作方式。 因此,他们更好地学习和阅读关闭,功能范围和原型设计。 Javascrpit非常简单,它迫使您编写好的逻辑代码。

所以我的答案是:是的,你的权利很好。 这是阶级和原型继承之间差异的重要标志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM