在节点导出中覆盖函数的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; };