2020-05-08
JSにおけるpublic/privateについて
Typescriptはプライベートでしか使った経験がないのですが、
publicとかprivateとかが素のJSの機能だと思っていたら違っていた(恥)
もちろん効果は知っていたけど、さすがに境界があいまいなのはアレなのでメモ
JSのドキュメントを見ると当然public/privateの記述はないが、ちゃんと手元でも検証して確認する
まずは素のJSから
class MyClass {
private hoge = 123
public fuga = 999
}
// => Uncaught SyntaxError: Unexpected identifier
ということで使えないことを確認
その代わりシャープによるprivateなプロパティを確認する
class MyClass {
#hoge = 123
fuga = 999
}
const tes = new MyClass
tes.fuga //=> 999
tes.#hoge // => Uncaught SyntaxError: Private field '#hoge' must be declared in an enclosing class
ここまでは素のJSの機能
ついでに static
は素のJSであることをチェック
class MyClass {
#hoge = 123
fuga = 999
static bar = 555
}
MyClass.bar //=> 555
ではTSで確認(TS公式のPlayground使用)
class MyClass {
public hoge: number = 999
private fuga: number = 123
static bar: number = 555
protected baz: number = 987
}
const tes: MyClass = new MyClass
tes.hoge //=> 999
tes.fuga //=> Property 'fuga' is private and only accessible within class 'MyClass'.
tes.baz //=> Property 'baz' is protected and only accessible within class 'MyClass' and its subclasses.
MyClass.bar //=> 555
クラスのプロパティ/メソッドはデフォルトでどこからでもアクセスできるので、publicは明示的に外部に公開したくない場合に使用する感じだろう
private
と protected
の違いは見ての通り