質問: hoge.Get("x"); if (x != x2) { // xは変更されている } ``` JintにSetter/Getterを設定する方法があるかどうかは分かりませんが、もし可能なら方法を教えていただけると嬉しいです。 【追記(2020/01/15)】 ・js側でgetter/setterを設定すれば良いという指摘があったので、詳細を説明します。 ・ユーザが入力したJsをJintで解釈して動作するプログラムを作っています。 ・そのJs内に関数があるのですが、これによって値がどう変更されたかを知るために、現在は関数実行後にもう一度同じ値を取得して比較するという方法をとっています。効率が悪いです。 ・ユーザが入力するJsの形式は既に決まっているので、setter/getterをJs側で書いておくことは難しいです
回答: Jint ダウンロードして 詳細確認してみました。 Jint は JavaScript の インタープリタ で 変数の値の書き換え処理は `Jint.Engine` クラスの `PutValue` メソッドで行っています。 いろいろ試した限りでは JavaScript の処理に影響を与えずに setter の処理に割り込むのは 難しいようです。 ソースが 公開されているので、いっそのこと `Jint.Engine` クラスを拡張して PutValue メソッドを 改造してみてはいかがでしょうか? 案としては Engine に ValueBeforChangeEventHandler を付けて PutValue の 入口で そのイベントハンドラを呼び出す。 というのはいかがでしょうか?