Function.prototype.caller でプライベートメソッドを実装する

非標準の Function.prototype.caller を使用してプライベートメソッドを実装する試み。 Google Chrome 15, Firefox 7, Opera 11.50 で動作し、IE8- では動作しないことを確認しています。 http://jsfiddle.net/rC4rC/2/ セキュリティ上の理由で ECMAScript 5 では arguments.caller が strict mode で実行できなく、ECMAScript 6 で取り込まれる可能性は低いそうです。残念。
1
think49 @think49

#JavaScript で private-method を使うには、ES6 で呼び出し元を判定する仕様を策定して ThrowStatement で実装すればいい気がしてきた。#Dart よりは #ECMAScript らしいと思う。

2011-11-04 17:51:58
think49 @think49

@think49 どうやら、Firefox で拡張されている Function.prototype.caller がそれらしい。ES6 仕様に取り込まれないかなあ…。http://t.co/fj8kiPIv

2011-11-04 18:48:51
think49 @think49

@think49 サンプルをhttp://t.co/5BJk6E7Vに投稿して初めてideoneが Function.prototype.caller に未対応なことに気がつく。独自拡張と知っていたはずなのに遅すぎた…。

2011-11-04 19:34:52
romer @romer_t

@think49 Function.prototype.callerはFirefoxは勿論の事ですが、Opera,GoogleChromeも実行できますよ。IEは実行環境が無いのでわかりませんが。(全て現行stableバージョンでconsoleを使った時の話です。)

2011-11-04 19:49:05
think49 @think49

@think49 jsFiddle にサンプルを投稿してみた。/ プライベートメソッドのサンプル - jsFiddle http://t.co/as55TIYR #ECMAScript #JavaScript

2011-11-04 19:49:30
think49 @think49

@romer_t そうみたいですね。検証していて初めて気がつきました。 IE9 で実装されているなら足並みが揃うので ES6 での仕様策定も夢ではないかもしれませんねー。

2011-11-04 19:53:34
think49 @think49

@think49 ちなみに、IE8- は try 節以外で ThrowStatement を使用できないのでどちらにしろ無理なことはわかっていました。 うろ覚えですが、IE9 で解消されていたと思います。

2011-11-04 19:56:13
think49 @think49

読んでる。イベント周りの実装がややこしいことになってる気がする。後方互換性を残すのも大変だなあ…。/ jQuery 1.7の更新内容をまとめたよ。 | http://t.co/2AIWKybu http://t.co/xzlbgjpM #JavaScript

2011-11-04 21:23:46
小倉唯 @Constellation

caller, 多分入らないんじゃないかなあ. strict modeでargumentsから弾かれたくらいなので…

2011-11-04 21:47:18
think49 @think49

@think49 http://t.co/iRtkoxJa で不具合を指摘いただいて修正。凡ミスですみません。/ プライベートメソッドのサンプル - jsFiddle http://t.co/qfPXNQDS #ECMAScript #JavaScript

2011-11-04 21:59:26
think49 @think49

@Constellation やっぱり入らないですかねー。Strict Mode でなくてもいいので取り込まれたら嬉しいのですが…。

2011-11-04 22:02:40
小倉唯 @Constellation

@think49 SES(Secure ECMAScript)でsecurity的にcallerないほうが良いとなった(結果strict modeで弾かれた)ので, 難しそうです…

2011-11-04 22:09:25
think49 @think49

@Constellation それは残念です。今のところ、private method は諦めるしかなさそうですね…。

2011-11-04 22:24:54