在构造函数中初始化的对象与属性之间有什么区别

What's the difference between an object initialised in the constructor vs properties

我在一个项目中也有几个混入。 有些在属性中设置了对象,例如:

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

而其他 mixins 在构造函数中设置了它们的对象,例如:

constructor() {
  super();

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

我想两者都是全局可访问的,因为 mixins 到处都在加载。 但是这两种实现之间有什么区别?

编辑(附加代码)

这些 mixins 是通过以下方式创建的:

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) {
  ...
}

通过 Properties 对象创建的对象被映射为 HTML 属性,这意味着您可以进行数据绑定,例如:

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

在构造函数或 connectedCallback 中创建的变量未映射为 HTML 属性,因此您无法从外部绑定它们。

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

会return

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

但是

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

将 return 未定义并且

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

不会工作