В чем разница между объектом, инициализированным в конструкторе, и свойствами - PullRequest
0 голосов
/ 06 июля 2018

У меня есть несколько миксинов в проекте, который мне тоже назначен. У некоторых их объекты установлены в свойствах как:

static get properties() {
  return {
    config: {
      type: Object
    }
  }
}

В то время как другие конструкторы имеют свои объекты, установленные в конструкторе, например:

constructor() {
  super();

  this.language = {
    name: "english",
    label: "EN"
  }
}

Я полагаю, что оба они доступны по всему миру, потому что миксины загружены повсюду. Но в чем разница между обеими реализациями?

изменить (дополнительный код)

Эти миксины создаются следующим образом:

MyMixin = function (superClass) {
  return class extends superClass {

    static get properties() {
      return {
        config: {
          type: Object
        }
      }
    }

    constructor() {
      super();
    }

или другой метод:

MyMixin = function (superClass) {
  return class extends superClass {

    static get properties() {
      return {
      }
    }

    constructor() {
      super();
      this.language = {
        name: "english",
        label: "EN"
      }
    }

и они используются другим компонентом следующим образом:

class HomePage extends MyMixin(Polymer.Element) {
  ...
}

1 Ответ

0 голосов
/ 06 июля 2018

Те, которые созданы с помощью Свойства объекта, отображаются как атрибуты HTML, что означает, что вы можете иметь привязку данных, например:

<my-component config="[[someContent]]"></my-component>

Переменные, созданные в конструкторе или connectedCallback, не отображаются как атрибуты HTML, поэтому их нельзя связать извне.

document.querySelector('my-component').language

Вернется

{
  name: "english",
  label: "EN"
}

но

document.querySelector('my-component').getAttribute('language')

вернет undefined и

<my-component language="[[someContent]]"></my-component>

не будет работать

...