【问题标题】:When to use constructor and super in Polymer 2.0?在 Polymer 2.0 中何时使用构造函数和 super?
【发布时间】:2018-01-10 07:33:18
【问题描述】:

在构建 Polymer 2.0 ES6 Web 组件时,经常使用以下模式。

constructor() {
  super();
}

Here the documentation describes calling the super(); function when defining an element.

However here in the Shop App 模式仅被遵循 3 次,在以下元素中:shop-app.html、shop-ripple-container.html、shop-tabs-overlay.html。

我们什么时候需要打电话给super()?这个调用什么时候需要在constructor() 函数中?没有像the Shop app 那样调用super() 的后果是什么?

编辑: 一位用户 (@4castle) 提出了这个问题might be a duplicate of this question。我恭敬地不同意。这个问题涉及 Polymer,而另一个问题涉及 React。另一个问题询问传递给super() 函数的参数。这个问题想知道当 super() 没有被调用时会发生什么,以及最好的调用位置在哪里(即在constructor() 内部与否)。

【问题讨论】:

  • super() 当一个类 extends 另一个类时是必需的。否则,如果您尝试访问this 而不先调用super(),它将抛出ReferenceError
  • @4castle:我根据您的评论和您指出的其他问题添加并回答。我还编辑了这个问题来解释为什么我认为它不同。如果您不介意,请告诉我您是否认为我在正确的轨道上。

标签: javascript polymer polymer-2.x


【解决方案1】:

我们什么时候需要打电话给super()

super() 调用元素的超类(父类)的构造函数。如果一个元素的定义定义了一个扩展另一个类的类并且super()没有被显式调用,则该元素默认调用超类的构造函数。

这个调用什么时候需要在constructor() 函数中?

调用super() 的正确位置是在元素的constructor() 方法内。

如果不像 Shop 应用程序那样调用 super() 会有什么后果?

在这种情况下,

class MyElement extends Polymer.Element {...}

与 Shop 应用程序一样 - 如果未显式调用 super(),则默认调用 Polymer.Element 构造函数。

【讨论】:

    【解决方案2】:

    事实上,调用以下命令以获得您的超级(父母)的全部利益也是一个好习惯:

    ready() {
      super.ready();
    }
    

    当你的组件准备好时,它将调用 Element 中的 ready 函数。

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 2013-11-17
      • 2011-10-21
      相关资源
      最近更新 更多