0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【javascript】シンボル

Last updated at Posted at 2020-07-15

この記事は以下の書籍を参考にして執筆しました。

#シンボルをオブジェクトのキーとして使用する
シンボルをプロパティ名として使えば、疑似プライベートプロパティを実現できる。

const Store = {
  //プロパティ名は計算されたプロパティである必要がある。
  [Symbol('_internals')]: { /* */ }
}

出典:入門JavaScriptプログラミング

ES6で追加されたgetOwnPropertySymbolメソッドではオブジェクトの直接のプロパティ農地シンボルであるものが全て含まれた配列を返す。
これによりシンボルへの参照を取得してプロパティにアクセスすることが可能。

そういう意味で本当のプライベートではないが、「完全にプライベートでないがパブリックでもない」APIはメタプロパティにうってつけ。

#グローバルシンボルで振る舞いへのフックを作成
グローバルシンボルはどこからでもアクセスできるシンボル
アクセスにはSymbol.forメソッドを呼ぶ

const sym=Symbol.for('my symbol')

出典:入門JavaScriptプログラミング

グローバルシンボルは定義されたフックをオブジェクトの振る舞いに追加するのに適してる。
#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

出典:入門JavaScriptプログラミング

これは関数なので簡略表記で整理できる。

const age = {
  number: 32,
  string: 'thirty-two',
  [Symbol.toPrimitive]() {
    return this.string
  }
}

console.log(`${age}`)

出典:入門JavaScriptプログラミング

この例ではオブジェクトを文字列型に型変換した。
オブジェクトが数値に型変換される時になにか別の処置を実行しても良い

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?