Следующая модель используется при создании веб-компонентов Polymer 2.0 ES6.
constructor() {
super();
}
Здесь в документации описывается вызов super();
функции при определении элемента.
Однако здесь, в приложении Shop, шаблон выполняется только 3 раза, в следующих элементах: shop-app.html, shop-ripple-container.html, shop-tabs-overlay.html.
Когда нам нужно вызвать super()
? Когда этот вызов должен находиться внутри функции constructor()
? И каковы последствия не вызова super()
как появляется в случае приложения Shop?
Изменение: пользователь (@4castle) предположил, что этот вопрос может быть дубликатом этого вопроса. Я почтительно не согласен. Этот вопрос касается Полимера, в то время как другой - Реакт. Другой вопрос задает вопрос о аргументах, переданных функции super()
. Этот вопрос хочет знать, что происходит, когда super()
не вызывается и где наилучшее место для вызова (т.е. Внутри constructor()
или нет).
Когда нам нужно вызвать
super()
?
super()
вызывает конструктор суперкласса элементов (родительский класс). Если определение элемента определяет класс, который расширяет другой класс, а super()
не вызывается явно, элемент вызывает конструктор суперкласса по умолчанию.
Когда этот вызов должен находиться внутри функции
constructor()
?
Правильное место вызова super()
находится внутри метода element constructor()
.
И каковы последствия не вызова
super()
как появляется в случае приложения Shop?
В случае, когда,
class MyElement extends Polymer.Element {...}
как в случае с приложением Shop App - конструктор Polymer.Element
вызывается по умолчанию, если super()
не вызывается явно.
На самом деле это также хорошая практика, чтобы вызвать следующее, чтобы получить полную выгоду от вашего супер (родителя):
ready() {
super.ready();
}
Это вызовет готовую функцию в элементе, когда ваш компонент готов.
super()
требуется, когда классextends
другой класс. В противном случае, он будет бросатьReferenceError
, если вы пытаетесь получить доступ кthis
без первого вызоваsuper()
.