javascript - 在 Node 导出中覆盖函数的 toString()

标签 javascript node.js

我正在尝试重写 toString() 方法,但遇到了困难。 已经看过 herehere ,但仍然没有运气。

我的代码如下:

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 将该函数用作构造函数,则只能在该函数的原型(prototype)上进行设置。由于您似乎没有在此处执行此操作,因此您需要在返回的实际函数上设置 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 函数中创建对象时添加 toString 函数。

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

关于javascript - 在 Node 导出中覆盖函数的 toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28141543/

相关文章:

node.js - Nodejs - 即使在调用 cluster.worker.disconnect() 之后,工作人员仍接受新请求

javascript - 每次为每个请求提供相同的输出

node.js - 是否可以禁用/删除 ExpressJS 中特定路由的中间件?

javascript - 将可聚焦控件限制在当前对话框中的最佳方法是什么?

javascript - 在Javascript中创建两个数字之间的整数数组

javascript - 粘性菜单 - 防止在页面刷新时加载

javascript - 将 $.get 转换为 node.js 请求

node.js - 将node.js代码封装在函数中

javascript - 无法在 DiscordJS 中通过不同作用域传递变量

javascript - 在 div 内搜索文本