javascript:function::['alert'](1) は何故動く?

解答は↓の様だが... http://nanto.asablo.jp/blog/2007/04/22/1459018 とりあえず、"function"という特殊な名前空間があるらしいことは分かった
3
テラマコ @teramako

Firefox javascript:function::alert(1) でも動くね...

2010-07-25 01:53:14
テラマコ @teramako

javascript:function::window.alert(1) でも動く。。

2010-07-25 01:56:21
テラマコ @teramako

xpcshell だと function::print(1) で動く

2010-07-25 02:03:54
テラマコ @teramako

javascript:(function(ns){ns::alert(1) })(new Namespace("@mozilla.org/js/function")) も動く

2010-07-25 02:27:58
小倉唯 @Constellation

たしかにtracemonkeyのsrcに該当行あるね. 4495行. function::ExpressionでExpressionが評価される. しかしこのE4Xがどこを根拠にしているのかさっぱりわからない.

2010-07-25 02:32:20
小倉唯 @Constellation

XML_SUPPORTが有効なときにしか有効にならないのだからほぼ確実にE4Xの機能なんだけれど. jsparse.cpp

2010-07-25 02:35:22
小倉唯 @Constellation

@mal_blue おおっ. ありがとうございます. function namespaceが拡張として存在するのですね.

2010-07-25 02:42:52
テラマコ @teramako

こういうことか! (function(x) [[typeof x.appendChild, x.appendChild], [typeof x.function::appendChild, x.function::appendChild]])(<x/>)

2010-07-25 03:21:38
テラマコ @teramako

var x=<x/> に対して x.appendChild はメソッドとして使えるけど、functionオブジェクトを取ることができない。</>が返ってきてしまう。 x.function::appendChild なら取れる

2010-07-25 03:26:29