实例化同一ES6类的不同类型的最佳实践

时间:2018-06-20 07:56:29

标签: html5-canvas es6-class

我正在构建HTML5 Canvas 2d游戏,我的项目中有一些es6类。其中之一是障碍。我想做的就是能够根据给定的类型(例如,小,厚,高等)创建此类的不同实例。

最好的方法是什么?

  1. 是否只需在类的构造函数中添加另一个参数并为其命名即可?

  2. 还是只是通过给定随机类型值扩展它来创建主类Obstacle的子类(例如SmallObstacle,TallObstacle)?

谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题基于您要如何构建和实现数据结构。两个选项都不一定优于其他100%的时间。我将在下面解释每个优点和缺点以及我的个人解决方案。您可以决定哪种方法更可行。

选项1:

优点:

  • 易于插入类中,并在以后的代码中进行处理
  • 让您的班级变得整洁苗条

缺点:

  • 您必须稍后在代码中处理它。初始化时(甚至在更新/渲染时),您的代码需要解释什么是类型,并基于此构建每个障碍。

选项2:

优点:

  • 进行有组织的课堂
  • 代码的后面工作量不大,因为您只是提取预设规范而不是对其进行解释

缺点:

  • 班级要大得多
  • 您可能会重复一些代码(尽管做得好的话就不会)

我的意见: 就我个人而言,我会跳过指定“大”,“中”,“高”,“宽”。取而代之的是,我在实现类时会使用一些逻辑,并根据需要设置高度和宽度。您可以利用如何轻松地指定值,同时还为函数构造函数提供默认值的优势。

这是一个片段示例:

class obstacle {
  constructor(x, y, w=150, h=150) {
	this.x = x;
	this.y = y;
        this.width = w; //default is 150
	this.height = h; //so it's medium or something
    this.sprite = ...; //etc.
  }
}

// Initialize 100 obstacles :P
for (let i=0; i<100; i++) {
  let x = Math.random() * scene.width;
  let y = Math.random() * scene.height;
  let foo = new obstacle(x, y);
  /* When you want different width and height instead
     of the default, construct like this:
     let bar = new obstacle(x, y, width, height);
  */
}