簡體   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