Ecmascript 6 `此`关键字在PreforeRegister方法中解析为聚合物中的HTMLElement

Ecmascript 6 `此`关键字在PreforeRegister方法中解析为聚合物中的HTMLElement,ecmascript-6,polymer,this,polymer-1.0,Ecmascript 6,Polymer,This,Polymer 1.0,在普通HTMLElement上执行beforeRegister()方法是否是Polymer的预期行为?这会导致在计算属性值内的属性声明中使用箭头函数时出错。它无法解析此。$因为此是本机HTMLElement,同时调用函数的对象是运行时的扩展聚合元素(如果使用正常函数,则该元素有效) 这不起作用: class TestComponent { beforeRegister() { /* during beforeRegister() execution `this` is a

在普通
HTMLElement
上执行beforeRegister()方法是否是Polymer的预期行为?这会导致在计算属性值内的属性声明中使用箭头函数时出错。它无法解析
此。$
因为
是本机
HTMLElement
,同时调用函数的对象是运行时的扩展聚合元素(如果使用正常函数,则该元素有效)

这不起作用:

  class TestComponent {
    beforeRegister() {
      /* during beforeRegister() execution `this` is a `HTMLElement`*/
      this.is = 'test-component';
      this.properties = {
        _testElement: {
          type: Object,
          value: () => this.$.testElement
        }
      };
    }
  }
这确实有效:

  class TestComponent {
    beforeRegister() {
      this.is = 'test-component';
      this.properties = {
        _testElement: {
          type: Object,
          value: function() {
            /* `this` is an instance of TestComponent */
            return this.$.testElement
          }
        }
      };
    }
  }

这不是一个大问题,但我想知道,这是否是Polymer中ES6支持的问题,是否会被修复,或者这是否是一个预期行为。

您可以声明getter,而不是使用
beforeRegister()
is
属性添加到类中,这将允许您对对象值使用ES6语法:

class TestComponent {
  get is() { return 'test-component' }

  get properties() {
    return {
      _testElement: {
        type: Object,
        value: () => this.$.testElement
      }
    }
  }

  ready() {
    console.log('ready', this._testElement);
  }
}

Polymer(TestComponent);

您可以声明getter,而不是使用
beforeRegister()
is
属性添加到类中,这将允许您对对象值使用ES6语法:

class TestComponent {
  get is() { return 'test-component' }

  get properties() {
    return {
      _testElement: {
        type: Object,
        value: () => this.$.testElement
      }
    }
  }

  ready() {
    console.log('ready', this._testElement);
  }
}

Polymer(TestComponent);

巴别塔的发音是正确的。该箭头函数中的
this
与注册前的
中的
this
相同,不是吗?它应该是
TestComponent
的一个实例。问题在于,在执行beforeRegister()时,
这是
HTMLElement
的一个实例。也许聚合物是问题的根源。这可能是一个问题,因为其他人也会面临同样的问题,尤其是在使用es6类聚合物时。因此,我宁愿将其标记为重复。当然,Polymer在这里可能会做一些奇怪的事情,在
HtmleElement
上调用
beforeRegister
,而不是
TestComponent
实例,但箭头函数按预期工作。好的,刚刚检查过,停用babel会导致相同的错误。这是一个聚合物错误,还是一个预期的行为?这对我来说还是很有趣的,所以也许可以重新表述这个问题?好的,我已经从这个问题中删除了对箭头函数的任何引用,现在这应该是一个关于聚合物的合理问题。巴别塔透明是正确的。该箭头函数中的
this
与注册前的
中的
this
相同,不是吗?它应该是
TestComponent
的一个实例。问题在于,在执行beforeRegister()时,
这是
HTMLElement
的一个实例。也许聚合物是问题的根源。这可能是一个问题,因为其他人也会面临同样的问题,尤其是在使用es6类聚合物时。因此,我宁愿将其标记为重复。当然,Polymer在这里可能会做一些奇怪的事情,在
HtmleElement
上调用
beforeRegister
,而不是
TestComponent
实例,但箭头函数按预期工作。好的,刚刚检查过,停用babel会导致相同的错误。这是一个聚合物错误,还是一个预期的行为?这对我来说仍然很有趣,所以也许可以重新表述这个问题?好的,我已经从这个问题中删除了对箭头函数的任何引用,这应该是一个关于聚合物的合理问题。