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会导致相同的错误。这是一个聚合物错误,还是一个预期的行为?这对我来说仍然很有趣,所以也许可以重新表述这个问题?好的,我已经从这个问题中删除了对箭头函数的任何引用,这应该是一个关于聚合物的合理问题。