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

参考文献