ES.next WeakMap

9,627 views

Published on

Published in: Design
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,627
On SlideShare
0
From Embeds
0
Number of Embeds
7,435
Actions
Shares
0
Downloads
10
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

ES.next WeakMap

  1. 1. ES.nextWeakMapid:mooz / @stillpedant
  2. 2. id:mooz / @stillpedant http://mooz.github.com/index-ja.html
  3. 3. 宣伝
  4. 4. 本が出ます
  5. 5. WeakMap
  6. 6. WeakMap = 連想配列
  7. 7. ECMAScript 6 に導入予定
  8. 8. Firefox 6 より利用可能
  9. 9. WeakMap 用法1. set(key, value) – key を指定して value を設定2. get(key) – key にひもづけられた value を取得3. has(key) – key にひもづけられた値があるかチェック4. delete(key) – key に対するエントリを削除※ has, delete は Firefox 独自実装
  10. 10. いまさら連想配列……?
  11. 11. すでに {}・Object() があるけど?
  12. 12. {}・Object() と比較して1. key にオブジェクトが指定可能 – しかも多くの実装では定数時間で値が取得できる2. key に指定されたオブジェクトを「弱く」参照 – GC (Garbage Collector) は何からも参照されていない オブジェクトを削除対象とする – WeakMap の key として指定されたオブジェクトは GC から見ると「参照されていない」ことに – 他にそのオブジェクトを参照しているものが存在しなけ れば GC は遠慮無くオブジェクトを削除する – (時間の都合上,詳しい説明はなし)
  13. 13. key にオブジェクトが指定可能
  14. 14. key にオブジェクトが指定可能 (1/2)• {}・Object() は key に文字列しか指定できない – 文字列以外を渡すと ToString される
  15. 15. key にオブジェクトが指定可能 (2/2)• WeakMap は key にオブジェクトが指定可能 – 「オブジェクトしか」指定できない – プリミティブ値を指定するとエラー
  16. 16. 使い道は?
  17. 17. オブジェクトの外部拡張 (1/2)• 「オブジェクトを拡張して付加情報を持たせたいが,そ れができない」ということは良くある• 例) – DOM ノードに独自プロパティを持たせると色々マズい • “Whats wrong with extending the DOM” – http://perfectionkills.com/whats-wrong-with-extending-the-dom/ – ECMAScript 5 ではオブジェクトの拡張を禁止できる • Object.freeze(obj) “bar” プロパティの追加 obj obj “foo”
  18. 18. オブジェクトの外部拡張 (2/3)• オブジェクト自体は拡張せず,外に付加情報を持つ – オブジェクトを指定すると付加情報を取り出せる• WeakMap を利用 – キーとして外部拡張したいオブジェクトを指定 – 値として付加情報(の集合)を指定 • ここに付加情報を突っ込んでいく• 利点 – オブジェクトを汚染しない – オブジェクトが(GC によって)破棄されると,付加情報も一緒 に破棄される
  19. 19. オブジェクトの外部拡張 (3/3) オブジェクト 付加情報一覧 付加情報一覧をオブジェクト毎に準備 付加情報の設定 付加情報の取得 node1, node2 を汚染せずに付加情報を持たせられた!
  20. 20. new WeakMap();
  21. 21. 参考文献[[harmony:weak_maps]] http://wiki.ecmascript.org/doku.php?id=harmony:weak_mapsES.next http://www.slideshare.net/BrendanEich/esnextWeakMap uniq http://d.hatena.ne.jp/murky-satyr/20110603/uniqmapWhats wrong with extending the DOM http://perfectionkills.com/whats-wrong-with-extending-the-dom/ ご清聴ありがとうございました

×