【问题标题】:miss prototype functions when "new" a instance“新建”实例时错过原型函数
【发布时间】:2015-11-30 10:26:26
【问题描述】:

我在nodejs中写了一个模块,里面Test.js,代码爆了

function Test() {
    this.key = 'value';
}
Test.prototype.foo = function () { return 'foo'; }
module.exports = Test;

然后,在 B.js 中

var Test = require('./services/Test');
var test = new Test();
console.log(test.foo());

不幸的是,我得到了“未定义的方法 foo”, 谁能告诉我发生了什么?非常感谢

【问题讨论】:

  • 在 B.JS 中 var test = require('./services/Test'); console.log(test.foo());
  • 可能你的 JS 文件不在正确的位置。当我复制您的代码时,它可以工作。你可以在一个干净的 NodeJS 应用程序中尝试它,它会工作的。也尝试调试它。并让 IDE 自动完成您的测试文件路径。
  • 我认为路径是正确的,它可以正确的“require”,但错误的“new”
  • console.log(Test, test, test.key) 记录什么?

标签: javascript node.js module commonjs


【解决方案1】:

检查您的文件位置,它应该在服务目录中。

【讨论】:

  • 我需要的是一个函数,这一步没问题,但是,当我“新建”时,原型方法丢失了
【解决方案2】:
function Test() {
    this.key = 'value';
}
Test.prototype.foo = function () { return 'foo'; }
module.exports = new Test();//Test;


var test = require('./services/Test');
console.log(test.foo());

您可以导出 Test 类的新对象。尝试这个。 或者你也可以使用 ES6 JavaScript。

【讨论】:

    【解决方案3】:

    Test.js 中,在定义原型函数之前尝试将 module.exports 移动到。

    如下:

    function Test() {
        this.key = 'value';
    }
    module.exports = Test;
    Test.prototype.foo = function () { return 'foo'; }
    

    【讨论】:

    • 感谢您为社区做出贡献。但是,在您回答之前,您应该检查它实际上是否正确或强烈怀疑您是正确的。感觉好像这个答案是一个猜测,事实上,当我尝试它时,我没有得到与 OP 所说的相同的行为。
    • 我只发布了这个,因为我正在寻找我自己的解决方案。所以我决定看看我包含的模块做了什么,发现他们在通过原型定义函数之前就已经放了这个。进行此更改后,它对我有用。
    猜你喜欢
    • 2014-06-03
    • 2010-11-29
    • 2020-09-13
    • 2017-08-22
    • 1970-01-01
    • 2019-12-17
    • 2021-02-12
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多