看看下面的编辑!
我目前正在寻找一种方法来重载一个动态生成的特定函数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
为每个返回的函数指定。)