Google Chrome v74 内で JavaScript の private を調査
こちらの記事によるとGoogle ChromeではJavaScriptのprivate利用ができるようになったみたいです。
private
privateは#で表すようです。
それにいつの間にかprivate系のproposalがstage3に上がってます。
試す
さっそく試してみるぞ!
chromeのコンソールを開いて下記を記入。
class Sandwich { #tomato = 'tomato'; static getTomato () { return this.#tomato; } } console.log(Sandwich.getTomato())
こちらの結果がエラーとなり、ちゃんと#tomato
がprivate fieldであるってお知らせしてくれますね。
Uncaught TypeError: Read of private field #tomato from an object which did not contain the field at Function.getTomato (<anonymous>:5:15) at <anonymous>:10:22
他のブラウザ
他のブラウザ(safariとfirefox)ではどうなのか気になったので試してみる。
Safari
- バージョン12.1 (14607.1.40.1.4)
#
がダメとしかエラーメッセージが出ません。
SyntaxError: Invalid character: '#'
Firefox
- 66.0.3 (64-bit)
fieldsがサポートされていませんとなりますね。
SyntaxError: fields are not currently supported
備考
以下のような場合とだと、undefinedが表示されるみたい。
class Sandwich { static #tomato = 'tomato'; } console.log(Sandwich.tomato)
これは、Sandwich.#tomato
にしないからundefinedになったみたい。
class Sandwich { static #tomato = 'tomato'; } console.log(Sandwich.#tomato)
しっかり、#
をつけてみるとちゃんとエラーメッセージが出た!
Uncaught SyntaxError: Undefined private field #tomato: must be declared in an enclosing class
参考文献
- New in Chrome 74, 入手先 https://developers.google.com/web/updates/2019/04/nic74
- ECMAScript proposals, 入手先 https://github.com/tc39/proposals