2017-03-01 69 views
2

我有一些由許多簡短的getter/methods組成的類。ES6 getter /無花括號的方法

實施例:

get jQuery() { 
    return this.pageConfig.jQuery || jQuery; 
} 

具有類似內容的箭頭函數可如下寫爲:

() => this.pageConfig.jQuery || jQuery; 

哪個是一襯墊和只的垂直空間1/3因此消耗。

但它不是一個吸氣劑也不是一種方法。

是否有一種以單線形式書寫getter/methods的推薦方法? (如果沒有大括號也沒有return關鍵字)

我的getter和方法不需要修改對象。他們只是在閱讀。

+7

通常,您不想使用箭頭語法來定義方法,因爲那樣您就不會得到'this'的值來指向對象,而這個對象就是您想要的對象上的方法。請記住,箭頭函數不僅是一種語法快捷方式,它們還使用詞彙'this',這不是您想要的對象上的方法。 – jfriend00

+2

如果這是你的第一個例子,那麼你的第一個例子可以摺疊成一行。只需保留大括號和「返回」,並將其全部放在一行上。 – jfriend00

回答

0

尼斯的單行解決方案:

readonly jQuery = this.pageConfig.jQuery || jQuery 

它很短,表現得像你期望它從吸氣劑,並且不需要大括號。

2

對於一個襯墊,只要進入這個:

get jQuery() {return this.pageConfig.jQuery || jQuery;} 

箭功能不是方法定義,因爲它們使用的詞彙this,而方法要對象this。請記住,雖然箭頭函數是一個很好的簡寫,但它們也會以一種通常不與方法定義兼容的方式影響this的值。

2

沒有,沒有什麼比短(你可以跳過;

get jQuery() { return this.pageConfig.jQuery || jQuery } 

詳細說明一下

不能使用箭頭功能(() => this.pageConfig.jQuery || jQuery),因爲對於一個它不是一個吸氣功能,並且this不是指對象的上下文,而是指執行的上下文(它可以是對象但不是必須的)。

有/是__defineGetter__函數(some documentation),它允許您定義一個getter。它現在已被棄用,可能會比get更復雜。但正如文檔所說,它被廣泛使用,並且可能永遠不會被刪除。

幸運的是:我所有的瘋狂的解決方案

class Test { 
 
    
 
    constructor() { 
 
    this.pageConfig = {} 
 
    this.pageConfig.jQuery = "value" 
 
    
 
    let properties = { 
 
     'jQuery':() => this.pageConfig.jQuery || "Default", 
 
     'text':() => this.pageConfig.text || "Default" 
 
    } 
 
    for(let prop in properties) this.__defineGetter__(prop, properties[prop]) 
 
    
 
    } 
 
    
 
} 
 

 
let t = new Test 
 
console.log(t.jQuery) 
 
console.log(t.text)

快樂一個襯層(但老實說,只使用從ECMA 5 get

+0

瘋狂的解決方案。我喜歡:-D – ideaboxer