nazonoRubyist RubyでJavaScriptのためにC このページをアンテナに追加 RSSフィード

2006-07-24

[]Functionのtypeofがfunctionと出るように! 02:04 Functionのtypeofがfunctionと出るように! - nazonoRubyist RubyでJavaScriptのためにC を含むブックマーク はてなブックマーク - Functionのtypeofがfunctionと出るように! - nazonoRubyist RubyでJavaScriptのためにC Functionのtypeofがfunctionと出るように! - nazonoRubyist RubyでJavaScriptのためにC のブックマークコメント

やっとSpiderMonkey 1.7 pre-release 1 でもこのテストが通るようになった。

def test_function_type^
  cx = SpiderMonkey::Context.new
  x = cx.eval("x={jsfunc:function(){return 3}}")
  x.function( "func1" ){|*arg| nil }
  assert_equal "function", cx.evaluate("typeof( x.jsfunc)") 
  assert_equal "function", cx.evaluate("typeof x.func1")
end

今までは、Ruby から定義した関数のtypeofが 'object'になっていたのだ( でも、たとえば上のテストコード中で設定している func1 はjavascript中から呼べる)

方法としては、RubyFunctionClassのgetObjectOptがNULL(デフォルトを使う)だったを定義してやって、js_ObjectOps をコピーしたものを渡してやるとうまくいった。js_ObjectOpsのコピーは Init_SpiderMonkey中で行った。

[]Rubyオブジェクトに対するhoge= でのメソッドコールが可能に 10:39 Rubyオブジェクトに対するhoge= でのメソッドコールが可能に - nazonoRubyist RubyでJavaScriptのためにC を含むブックマーク はてなブックマーク - Rubyオブジェクトに対するhoge= でのメソッドコールが可能に - nazonoRubyist RubyでJavaScriptのためにC Rubyオブジェクトに対するhoge= でのメソッドコールが可能に - nazonoRubyist RubyでJavaScriptのためにC のブックマークコメント

 def test_js_set_rubyprop
  cx = SpiderMonkey::Context.new
  dog = Struct.new("Dog", :name, :age)
  x=dog.new
  x.name="hoge"
  assert_equal 'hoge', x.name
  cx.set_property( "x", x );
  assert_equal "hoge", cx.eval("x.name")
  assert_equal 'fuga', cx.eval("x.name='fuga'")
  assert_equal 'fuga', x.name
 end
トラックバック - http://rubyist.g.hatena.ne.jp/nazoking/20060724