任意の入力文字列に対して値を管理したいとき, Object.create(null)
が使える.
var obj = Object.create(null); console.log(obj["toString"]); // => undefined
こうすると Object.prototype
に存在するプロパティ/メソッドを継承しない真に空のオブジェクトが作成できるので, 例えばうっかり "toString"
などが入力されても問題ない.
ところで ES6 には Map
がある *1 からそれを使えよ, と思われるかもしれないけれど, 複製がコストになる場合や, あるいは上書きされない限り複製元を参照したい場合に, プロトタイプ継承を利用できる.
var parent = Object.create(null); parent["foo"] = 1; var child = Object.create(parent); console.log(child["foo"]); // => 1 parent["foo"] = 2; console.log(child["foo"]); // => 2 child["foo"] = 3; console.log(parent["foo"]); // => 2 console.log(child["foo"]); // => 3
もっとも, これが有効に使える場面はそんなに多くはない気はするけれど……