JavaScript を ES2015 で書くと「意識高い系」になると噂があるとかないとか…
Babel な人に助けてもらうらしい。
Babel
Babel: Learn ES2015
見ると大分いい感じな様子。
class, extends も使える…
で、Singleton はどう書く?
Google 先生に聞きました。
es2015 singleton
es6 singleton
なんか色々見つかった。
色々見つかる時は決定打がないことが多いんだよな(ゴニョゴニョ…)
export を instance にするやつ
Gist: milankarunarathne/ES6_Singlet.js
Symbol を使うやつ
Gist: SanderLi/Singleton.js
let instance を使うやつ
雰囲気で選ぶと let instance かなぁ。
こんな感じでしょうか
let _instance = null; class SingleTon { constructor() { if ( _instance !== null ) { throw new Error('SingleTon.instance()してね'); } if ( _instance === null ) { _instance = this; } return _instance; } static instance() { if ( _instance === null ) { _instance = new SingleTon(); } return instance } } |
最初の1回 new SingleTon()
できちゃうのがなぁ。。。
う〜ん、悩ましい。
おまけ
Babel · The compiler for writing next generation JavaScript
へコードを突っ込むと下位互換なコードが見れます。
げっ、美しくない。。。
【追記】
symbol 追加すると new SingleTon()
できないことは投稿してすぐに気づいたけど…
let _instance = null; let _symbol = Symbol(); class SingleTon { constructor( target ) { if ( _symbol !== target || _instance !== null ) { throw new Error('SingleTon.instance()してね'); } _instance = this; return _instance; } static instance() { if ( _instance === null ) { _instance = new SingleTon( _symbol ); } return instance } } |
全部 static
で書いた方が簡単じゃないかと考え始めて悶々としている今日この頃です。