我试图覆盖toString()方法,但遇到了困难。 已经看过here和here,但仍然没有运气。
我的代码如下:
var Foo = function(arg) {
// some code here...
return function (a, b, c) {
// return function code...
};
};
Foo.prototype.toString = function () {
return "string representation of function";
};
exports.bar(arg) {
return Foo(arg);
};
在另一个模块中:
var mod = require('the-module-from-above');
console.log(mod.bar().toString()); // prints return function source code.
我的问题是,为什么我的toString()函数没有被调用,如何让它被调用?
谢谢。答案 0 :(得分:1)
如果您将该函数用作new
的构造函数,则只能在函数的原型上设置内容。由于您似乎没有在此处执行此操作,因此您需要在返回的实际函数上设置toString
函数。
function fooToString() {
return "string representation of function";
}
var Foo = function(arg) {
// some code here...
var ret = function (a, b, c) {
// return function code...
};
ret.toString = fooToString;
return ret;
};
如果您愿意,可以在toString
函数中实际创建对象时添加bar
函数。
exports.bar(arg) {
var foo = Foo(arg);
foo.toString = fooToString;
return foo;
};