関数オブジェクトとMethod/UnboundMethodオブジェクト
foo = new Object(); foo.hoge = function () {print(this)}; fuga = foo.hoge piyo = function () {foo.hoge()}; fuga.call(foo) piyo()
このfugaとpiyoは違うんだよね.JavaScript的には当然なんだろうけど.ただの関数オブジェクトだから.
どっちかというとpiyoのほうがよく使いそうだから,functionとか書かずに使えても良さそうな気がしないでもない.
この二つは,Rubyで言うと丁度MethodオブジェクトとUnboundMethodオブジェクトに相当する.
class Foo def hoge p(self) end end foo = Foo.new fuga = Foo.instance_method(:hoge) piyo = foo.method(:hoge) fuga.bind(foo)[] piyo[]
UnboundMethodオブジェクトはbindしないと使えないから,JavaScriptみたいにcallで呼ぶのを忘れて変なことが起きないようになってるのは安心だね.
でも,instance_methodはちょっと長い.