JavaScriptCoreで実行するスクリプトにおけるthisの扱いがわからない
お世話になっております。
仕事でiOSのJavaScriptCoreを使っているのですが、以下のようなスクリプトを走らせた際に意図した挙動になりません。
// JSコンテキストを作成
JSContext context = new JSContext();
// スクリプトの実行
context.EvaluateScript("var hoge = { position:[0,0,0], update: function() { this.position[0] += 1; } };");
// hogeオブジェクトの取り出し
JSValue hoge = context[(NSString)"hoge"];
// hoge.positionを出力
Console.WriteLine(hoge[(NSString)"position"].ToString());
// hoge.updateの呼び出し
hoge.GetProperty("update").Call();
// 変更後のhoge.positionの出力
Console.WriteLine(hoge[(NSString)"position"].ToString());
期待している出力結果は、
[0,0,0]
[1,0,0]
なのですが、実際は
[0,0,0]
[0,0,0]
のように何も変更されていません。
update
の呼び出し方はJSValue.Call(JSValue[]) Methodを参考にしました。
気になってupdate
の中身をreturn this.position;
に書き換えると結果はundefined
。
さらに書き換えてreturn this;
とするとグローバルオブジェクトが返ってきました。
JavaScriptでメソッド呼び出す場合、thisにはメソッドを持っているオブジェクトが入るはずですよね?
メソッド呼び出しの仕方が間違えているのかもしれません。
原因を知りたいです。