JavaScriptCoreで実行するスクリプトにおけるthisの扱いがわからない


お世話になっております。

仕事でiOSのJavaScriptCoreを使っているのですが、以下のようなスクリプトを走らせた際に意図した挙動になりません。

[code]

    // 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());
    
[/code]

期待している出力結果は、

[code]

    [0,0,0]
    [1,0,0]
    
[/code]

なのですが、実際は

[code]

    [0,0,0]
    [0,0,0]
    
[/code]

のように何も変更されていません。

`update`の呼び出し方は[JSValue.Call(JSValue[]) Method](https://docs.microsoft.com/en-
us/dotnet/api/javascriptcore.jsvalue.call#JavaScriptCore_JSValue_Call_JavaScriptCore_JSValue___)を参考にしました。

気になって`update`の中身を`return this.position;`に書き換えると結果は`undefined`。  
さらに書き換えて`return this;`とするとグローバルオブジェクトが返ってきました。

JavaScriptでメソッド呼び出す場合、thisにはメソッドを持っているオブジェクトが入るはずですよね？

メソッド呼び出しの仕方が間違えているのかもしれません。  
原因を知りたいです。




これを書きながら並行して調べてたらJSValueクラスにはどうやら`Invoke`メソッドなるものが存在した...。

[JSValue.Invoke(String, JSValue[]) Method](https://docs.microsoft.com/en-
us/dotnet/api/javascriptcore.jsvalue.invoke#JavaScriptCore_JSValue_Invoke_System_String_JavaScriptCore_JSValue___)

これを以下のように使うと、

[code]

    hoge.Invoke("update");
    
[/code]

次のように期待した結果が出ました！！

[code]

    [0,0,0]
    [1,0,0]
    
[/code]

メソッド内で`this`を使う場合は呼び方に気をつけないといけないですね。




これを書きながら並行して調べてたらJSValueクラスにはどうやら`Invoke`メソッドなるものが存在した...。

[JSValue.Invoke(String, JSValue[]) Method](https://docs.microsoft.com/en-
us/dotnet/api/javascriptcore.jsvalue.invoke#JavaScriptCore_JSValue_Invoke_System_String_JavaScriptCore_JSValue___)

これを以下のように使うと、

[code]

    hoge.Invoke("update");
    
[/code]

次のように期待した結果が出ました！！

[code]

    [0,0,0]
    [1,0,0]
    
[/code]

メソッド内で`this`を使う場合は呼び方に気をつけないといけないですね。

