この記事は以下の書籍を参考にして執筆しました。
#シンボルをオブジェクトのキーとして使用する
シンボルをプロパティ名として使えば、疑似プライベートプロパティを実現できる。
const Store = {
//プロパティ名は計算されたプロパティである必要がある。
[Symbol('_internals')]: { /* */ }
}
ES6で追加されたgetOwnPropertySymbolメソッドではオブジェクトの直接のプロパティ農地シンボルであるものが全て含まれた配列を返す。
これによりシンボルへの参照を取得してプロパティにアクセスすることが可能。
そういう意味で本当のプライベートではないが、「完全にプライベートでないがパブリックでもない」APIはメタプロパティにうってつけ。
#グローバルシンボルで振る舞いへのフックを作成
グローバルシンボルはどこからでもアクセスできるシンボル
アクセスにはSymbol.forメソッドを呼ぶ
const sym=Symbol.for('my symbol')
グローバルシンボルは定義されたフックをオブジェクトの振る舞いに追加するのに適してる。
#well-knownシンボルでオブジェクトの振る舞いを変更する
well-knownシンボルはSymbolに直接割り振られた組み込みシンボル
Symbol.toPrimitiveプロパティを利用すればオブジェクトをフックし、そのオブジェクトをプリミティブ値に型変換する方法が制御できる。
const age = {
number: 32,
string: 'thirty-two',
[Symbol.toPrimitive]: function() {
return this.string
}
}
console.log(`${age}`)//thirty-two
これは関数なので簡略表記で整理できる。
const age = {
number: 32,
string: 'thirty-two',
[Symbol.toPrimitive]() {
return this.string
}
}
console.log(`${age}`)
この例ではオブジェクトを文字列型に型変換した。
オブジェクトが数値に型変換される時になにか別の処置を実行しても良い