以下の編集を見てください!
私は現在、動的に生成される(関数によって返される) 1つの特定の関数のtoString
メソッドをオーバーロードする方法を探しています。の関数をオーバーロードできることはわかっていますが、これはすべての関数のすべての関数をオーバーロードするため、これは避けたいと思います。toString
Function.prototype
toString
私のサンプル関数:
var obj = {
callme: function() {
return function() {
// Dynamically fetch correct string from translations map
return "call me, maybe";
}
}
}
// Binding callme to func, allowing easier access
var func = obj.callme.bind(obj);
console.log(func, func())
これまで、関数を通常のJavaScriptオブジェクトのように扱うことを試みてきました。
func.toString = function() {
return this();
}
これにより、のFunction.prototype.toString
代わりにまだ呼び出されfunc.toString
ます。
にアクセスしようとすることはできません。これはオブジェクトではなく関数であるためfunc.prototype
、プロパティは未定義です。prototype
の上書きtoString
はFunction.prototype
オプションでfunc
はありません。コードの古い部分との互換性を損なう可能性があるため、オブジェクトに変更することもできません。
編集:返された関数ではなくtoString
関数のを上書きしているため、上記の試みは明らかに機能していません。さて、より良い質問です。返されるすべての関数を上書きして、同じを「共有」するための洗練された方法はありますか。(返される関数ごとにを指定する必要がないことを意味します。)func
toString
toString
func
toString
toString