401

UPDATE : 最近、Mozilla から素晴らしい記事が出てきました。気になる方は読んでみてください。

ご存知かもしれませんが、彼らはECMAScript 6 に新しい Symbol プリミティブ型を含めることを計画しています(他のクレイジーなものは言うまでもありません)。私は常々:symbol、Ruby の概念は不要だと考えていました。JavaScript で行うように、代わりに単純な文字列を簡単に使用できます。そして今、彼らはそれで JS を複雑にすることにしました。

動機がわかりません。JavaScript でシンボルが本当に必要かどうか、誰か説明してもらえますか?

4

7 に答える 7

250

Javascript にシンボルを導入した当初の動機は、プライベートプロパティを有効にすることでした。

残念ながら、彼らは最終的に大幅に格下げされました。Object.getOwnPropertySymbolsたとえば、またはプロキシを使用して、リフレクションを介してそれらを見つけることができるため、それらはもはやプライベートではありません。

それらは現在、一意のシンボルとして知られており、その唯一の用途は、プロパティ間の名前の衝突を避けることです。たとえば、ECMAScript 自体は、特定のメソッドを介して拡張フックを導入できるようになりました。このメソッドは、ユーザー名と衝突する危険を冒さずにオブジェクトに配置できます (たとえば、反復プロトコルを定義するため)。

それが言語に記号を追加する動機として十分に強いかどうかは議論の余地があります.

于 2014-03-09T08:48:31.727 に答える