2017-03-01 8 views
2

私は、多くの短いgetter /メソッドで構成されるいくつかのクラスを持っています。ES6 getter/method中括弧なし

例:次のように同様のコンテンツを有する

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

矢印機能を書くことができる:

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

ワンライナーであり、したがってのみ1/3垂直空間のを消費します。

しかし、ゲッターや方法ではありません。

ゲッター/メソッドを1ライナーの形で記述するための推奨方法はありますか? (できるだけ中括弧を使わず、returnキーワードなし)

getterおよびメソッドでオブジェクトを変更する必要はありません。彼らはちょうど読書です。 1つのライナー用

+7

一般に、矢印構文を使用してメソッドを定義したくないのは、オブジェクトのメソッドに必要なオブジェクトを指すように 'this'の値を取得しないためです。矢印関数は文法のショートカットだけでなく、オブジェクト上のメソッドに必要な字句 'this'を使用することを覚えておいてください。 – jfriend00

+2

最初の例を1行にまとめることができます。中括弧と 'return'をそのまま1行に入れてください。 – jfriend00

答えて

0

ニースワンライナーソリューション:

readonly jQuery = this.pageConfig.jQuery || jQuery 

短いですが、ゲッターから期待しているように振る舞い、中括弧は必要ありません。

2

、ちょうどこので行く:彼らは字句thisを使用するための方法は、オブジェクトthisを望んでいるのに対し、

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

アロー機能は、メソッド定義のためではありません。矢印関数はすばらしい省略形ですが、通常はメソッド定義と互換性のない方法でthisの値にも影響します。

2

いいえ、あなたは理由1のために、矢印機能(() => this.pageConfig.jQuery || jQuery)を使用することはできませんよりも短いもの(あなたが;をスキップすることができます)

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

もう少し説明

はありませんゲッター関数ではなく、thisはオブジェクトのコンテキストを参照するのではなく、実行のコンテキスト(オブジェクトであってもかまいませんが、

__defineGetter__機能があり(some documentation)、ゲッターを定義することができます。現在は推奨されておらず、おそらく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)

クレイジーソリューションのためのすべての幸せな1つの裏地だ(正直なところばかりECMA 5からgetを使用)

+0

クレイジー溶液。好きだった – ideaboxer