nodejs で JSON-RPC ライブラリを使用しています。関数を名前 (例: rpc({publicName: privateFunction})
) で登録すると、RPC ライブラリが関数を呼び出して、JSON と関数の引数のマーシャリングを処理します。単純な関数ではうまく機能しますが、プロトタイプ関数 (オブジェクトのプロトタイプチェーンで定義された関数) を渡すと壊れます。問題は、RPC ライブラリがapply
コンテキストを変更する関数を呼び出しているthis
ため、他のプロトタイプ プロパティ/関数にアクセスできなくなったことです。
問題の例を次に示します。
var MyObj = function(prop1,prop2,prop3){
this.prop1 = prop1;
this.prop2 = prop2;
this.prop3 = prop3;
}
MyObj.prototype.showProps = function(separator){
console.log(this.prop1 + separator + this.prop2 + separator + this.prop3);
}
var myObjInstance = new MyObj('a', 'b', 'c');
myObjInstance.showProps(',');
// displays a,b,c
// I register the function as rpc({show_props:myObjInstance.showProps}) and the RPC lib calls it like
myObjInstance.showProps.apply(this, [',']);
// displays undefined,undefined,undefined
これを修正するためのより良いテクニックはありますか? this
プロトタイプ関数内のコンテキストを保持する方法はありますか?