在节点导出中覆盖函数的toString()

我想重写一个toString()方法,但陷入困境。 已经看过这里 ,但仍然没有运气。

我的代码如下:

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()函数怎么没有被调用,我怎样才能让它被调用?

谢谢。

如果您将函数作为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; }; 

如果你希望这样做,你也可以在bar实际上创build对象时添加toString函数。

 exports.bar(arg) { var foo = Foo(arg); foo.toString = fooToString; return foo; };