簡體   English   中英

帶有箭頭功能的 ES6 getter/setter

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM