Javascriptでのシンボル
シンボルだけCreateSymbol()で作成する形では統一性がないので、他のオブジェクトも同様に作れるようにします。
記事の本題から外れた細かいつっこみなるけど、以下のように書くと new Symbol() でいけます。
var TAG_SYMBOL = 1; function Symbol(str) { var instance = Symbol.symbols[str]; if (instance == undefined) { instance = this; Symbol.symbols[str] = instance; } instance.tag = TAG_SYMBOL; instance.name = str; return instance; } (function() { if (!Symbol.symbols) { Symbol.symbols = {} } })(); var sym1 = new Symbol("test1"); var sym2 = new Symbol("test1"); var sym3 = new Symbol("test3"); WScript.Echo(sym1 === sym2); // => true WScript.Echo(sym1 === sym3); // => false WScript.Echo(sym2 === sym3); // => false // 強引に値を書き換えた場合の動作 sym1.name = "x"; WScript.Echo(sym2.name); // => "x"
修正(2006/1/10)
iriyakさんのコメントを参考に、シンボルテーブル初期化をコンストラクタから追い出し。