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