[英]ES6 getter/setter with arrow function
我正在使用babel6
,對於我的寵物項目,我正在為XMLHttpRequest
創建一個包裝器,用於我可以使用的方法:
const open = (method, url, something) => {
return this.xhr.open(method, url, something);
}
但是對於屬性箭頭功能不起作用。 這有效:
get status() { return this.xhr.status; }
但我不能使用箭頭功能:
get status = () => this.xhr.status;
這是故意的嗎?
根據 ES2015 語法, 對象字面量上的屬性只能是以下三種情況之一:
屬性定義:
- 標識符參考
- 屬性
:
賦值表達式- 方法定義
這些類型中唯一允許前導get
的是MethodDefinition :
方法定義:
- PropertyName
(
StrictFormalParameters)
{
FunctionBody}
- 生成器方法
get
PropertyName(
)
{
FunctionBody}
set
PropertyName ( PropertySetParameterList)
{
FunctionBody}
如您所見, get
形式遵循非常有限的語法,必須是以下形式
get NAME () { BODY }
語法不允許get NAME = ...
形式的函數。
接受的答案很棒。 如果您願意使用普通函數語法而不是緊湊的“箭頭函數語法”,那是最好的。
但也許你真的很喜歡箭頭函數; 也許您出於其他原因使用箭頭函數,這是普通函數語法無法替代的; 您可能需要不同的解決方案。
例如,我注意到 OP 使用this
,你可能想在詞法上綁定this
; aka “non-binding of this” ),箭頭函數對於詞法綁定很有用。
您仍然可以通過Object.defineProperty
技術將箭頭函數與 getter 一起使用。
{
...
Object.defineProperty(your_obj, 'status', {
get : () => this.xhr.status
});
...
}
請參閱object initialization
技術(又名get NAME() {...}
)與defineProperty
技術(又名get : ()=>{}
)的提及。 至少有一個顯着差異,使用defineProperty
需要變量已經存在:
在現有對象上定義 getter
即使用Object.defineProperty
您必須確保your_obj
(在我的示例中)存在並保存到變量中(而使用object-initialization
,您可以在對象初始化中返回對象文字: {..., get(){ }, ... }
)。 有關Object.defineProperty
的更多信息,請點擊此處
Object.defineProperty(...)
似乎具有與get NAME(){...}
語法相當的瀏覽器支持; 現代瀏覽器,IE 9。
_getvalue: () => {
return this.array.length;
}
get value(): number {
return this._getvalue();;
}
訪問類中的父對象
它為我工作:P
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.