我正在使用babel6和我的宠物项目我正在为XMLHttpRequest创建一个包装器,我可以使用的方法:
pagingEnabled
但是对于属性箭头功能不起作用
这有效:
open = (method, url, something) => {
return this.xhr.open(method, url, something);
}
但我无法使用
get status() { return this.xhr.status; }
这是故意的吗?
答案 0 :(得分:73)
根据ES2015语法,a property on an object literal只能是四件事之一:
PropertyDefinition :
- IdentifierReference
- PropertyName
:
AssignmentExpression- MethodDefinition
允许排名get
的这些类型中唯一一个是MethodDefinition:
MethodDefinition :
- PropertyName
(
StrictFormalParameters)
{
FunctionBody}
- GeneratorMethod
get
PropertyName(
)
{
FunctionBody {{1} }}
PropertyName ( PropertySetParameterListset
)
FunctionBody{
正如您所看到的,}
形式遵循非常有限的语法,必须采用
get
语法不允许使用get NAME () { BODY }
形式的函数。
答案 1 :(得分:23)
接受的答案很棒。如果您愿意使用普通函数语法而不是 compact"箭头函数语法"
但也许你真的喜欢箭头功能;也许您使用箭头功能是出于另一个原因,正常的函数语法无法取代您可能需要一个不同的解决方案。
例如,我注意到OP使用this
,你可能想要bind this
lexically; aka "non-binding of this"),而箭头函数对于那个词法绑定是有用的。
您仍然可以通过Object.defineProperty
技术将箭头功能与吸气剂一起使用。
{
...
Object.defineProperty(your_obj, 'status', {
get : () => this.xhr.status
});
...
}
请参阅object initialization
technique (aka get NAME() {...}
)与defineProperty
technique (aka get : ()=>{}
)的提及。至少存在一个显着差异,使用defineProperty
要求变量已经存在:
在现有对象上定义一个getter
即。使用Object.defineProperty
,您必须确保your_obj
(在我的示例中)存在并保存到变量中(而使用object-initialization
,您可以在对象初始化中返回对象 - 文字:{{ 1}})。有关Object.defineProperty
specifically, here
{..., get(){ }, ... }
似乎具有与Object.defineProperty(...)
语法相当的浏览器支持;现代浏览器,IE 9。
答案 2 :(得分:-3)
_getvalue: () => {
return this.array.length;
}
get value(): number {
return this._getvalue();;
}
访问类中的父对象
对我有用:P