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

时间:2016-03-04 20:40:46

标签: javascript class inheritance prototype ecmascript-6

在玩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 “)。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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