ES Harmony
Proxy
on
Firefox 4
id:mooz
@stillpedant
About
mooz (@stillpedant)
Add-ons:
KeySnail
Emacs 版 Vimperator
Clipple
クリップボードマネージャ
gpum
Gmail の未読メール管理
See http://mooz.gi...
What’s the ES Harmoney?
ECMAScript 3
ECMAScript 4
ECMAScript 5
ECMAScript Harmoney
未来の JavaScript
What’s the Proxy?
• プロパティアクセス (代入, 取得)
• in 演算子の適用
• delete 演算子の適用
• new F(), F()
などの操作がされた時,
JavaScript 規定の動作ではなく
“ユーザの設定...
• Proxy の作成には Proxy.create() を使用
Proxy.create()
ハンドリング時に呼ばれる関数ハンドルしたい操作
Example (1/3)
var x = obj.x;
get が呼ばれ name に “x” が入る.
Example (2/3)
obj.y = 100;
set が呼ばれ
name に “y”, val に 100 が入る.
Example (3/3)
(“foo” in obj)
has が呼ばれ name に “foo” が入る.
Proxy for?
Q: 「こんなものが何の役に立つの?」
A: 「組み込みオブジェクトを模倣できるよ」
B: 「DSL! DSL!」
夢が広がる
Proxy on Firefox 4
• Firefox 4 では Proxy が使用可能
Use cases
• 二つほど使用例をでっち上げることに成功
1.not
2.safe
1.not
• あるオブジェクト (親含む) が,
あるプロパティを持たない場合に実行したい
嬉しくない
Why not?
• obj を Proxy でラップ
• obj に対する in 演算子の効果を反転
嬉しい!
not(obj)
not :: Before & After
Before:
After:
not (implementation)
時に呼ばれる関数
結果を反転して返す
2. safe
• 深いオブジェクトのプロパティをたどりたい
– プロパティが途中で定義されていなかったりする
– null や undefined が出てきたりする
• 単純に obj.a.b.c と出来ない
やってられない
Why safe?
嬉しい!
safe(x)
• x を Proxy でラップ
• . の代わりに $ を使ってプロパティをたどる
• 安全
safe :: Before & After
Before:
After:
safe (implementation)
このProxy オブジェクトの get メソッドに
という文字列が渡る
で文字列を分割して
得られたプロパティを順にたどる
(この中に面倒な処理を隠蔽)
Proxy 便利
でも、
Firefox 4 限定でしょ?
宗教上の理由で
Firefox
使えないし……
ご安心下さい
node-proxy
https://github.com/brickysam26/node-proxy
References
[[harmony:proxies]]
http://wiki.ecmascript.org/doku.php?id=harmony:proxies
Proxy Tutorial
http://soft.vub.ac.be...
Upcoming SlideShare
Loading in...5
×

ES Harmony Proxy on Firefox 4

3,074

Published on

ES Harmony Proxy on Firefox 4

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,074
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ES Harmony Proxy on Firefox 4

  1. 1. ES Harmony Proxy on Firefox 4 id:mooz @stillpedant
  2. 2. About mooz (@stillpedant) Add-ons: KeySnail Emacs 版 Vimperator Clipple クリップボードマネージャ gpum Gmail の未読メール管理 See http://mooz.github.com/index-ja.html
  3. 3. What’s the ES Harmoney? ECMAScript 3 ECMAScript 4 ECMAScript 5 ECMAScript Harmoney 未来の JavaScript
  4. 4. What’s the Proxy? • プロパティアクセス (代入, 取得) • in 演算子の適用 • delete 演算子の適用 • new F(), F() などの操作がされた時, JavaScript 規定の動作ではなく “ユーザの設定した関数” が呼び出されるようなオブジェクト ES Harmoney (未来の JavaScript) の機能
  5. 5. • Proxy の作成には Proxy.create() を使用 Proxy.create() ハンドリング時に呼ばれる関数ハンドルしたい操作
  6. 6. Example (1/3) var x = obj.x; get が呼ばれ name に “x” が入る.
  7. 7. Example (2/3) obj.y = 100; set が呼ばれ name に “y”, val に 100 が入る.
  8. 8. Example (3/3) (“foo” in obj) has が呼ばれ name に “foo” が入る.
  9. 9. Proxy for? Q: 「こんなものが何の役に立つの?」 A: 「組み込みオブジェクトを模倣できるよ」 B: 「DSL! DSL!」 夢が広がる
  10. 10. Proxy on Firefox 4 • Firefox 4 では Proxy が使用可能
  11. 11. Use cases • 二つほど使用例をでっち上げることに成功 1.not 2.safe
  12. 12. 1.not
  13. 13. • あるオブジェクト (親含む) が, あるプロパティを持たない場合に実行したい 嬉しくない Why not?
  14. 14. • obj を Proxy でラップ • obj に対する in 演算子の効果を反転 嬉しい! not(obj)
  15. 15. not :: Before & After Before: After:
  16. 16. not (implementation) 時に呼ばれる関数 結果を反転して返す
  17. 17. 2. safe
  18. 18. • 深いオブジェクトのプロパティをたどりたい – プロパティが途中で定義されていなかったりする – null や undefined が出てきたりする • 単純に obj.a.b.c と出来ない やってられない Why safe?
  19. 19. 嬉しい! safe(x) • x を Proxy でラップ • . の代わりに $ を使ってプロパティをたどる • 安全
  20. 20. safe :: Before & After Before: After:
  21. 21. safe (implementation) このProxy オブジェクトの get メソッドに という文字列が渡る で文字列を分割して 得られたプロパティを順にたどる (この中に面倒な処理を隠蔽)
  22. 22. Proxy 便利
  23. 23. でも、 Firefox 4 限定でしょ?
  24. 24. 宗教上の理由で Firefox 使えないし……
  25. 25. ご安心下さい
  26. 26. node-proxy https://github.com/brickysam26/node-proxy
  27. 27. References [[harmony:proxies]] http://wiki.ecmascript.org/doku.php?id=harmony:proxies Proxy Tutorial http://soft.vub.ac.be/~tvcutsem/proxies/index.html Proxies are Awesome! http://www.slideshare.net/BrendanEich/metaprog-5303821 ご清聴ありがとうございました
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×