“ this”不返回module.exports

时间:2019-04-06 16:37:40

标签: javascript node.js

使用下面的代码使用Node.js v11.13.0,我收到了orphanRemoval = true错误。

{
    "id": 1,
    "name": "wow",
    "lessons": []
}
this.say is not a function

当我使用/* utils.js */ module.exports = { test: function() { this.say('Hello.'); }, say: function(text) { console.log(text); } }; 声明的函数登录/* index.js */ const {test} = require('./utils.js'); test(); 时,似乎返回由Node.js创建的全局环境对象。如果我改用箭头函数,它将返回一个空对象。

为什么this不返回function() {

该代码仅是示例,我实际上并没有使用它。

3 个答案:

答案 0 :(得分:0)

此后已通过正确使用module.exports来解决。这个问题背后的部分困惑是因为Visual Studio Code在我的函数中说this应该是module.exports。如果需要多次使用它,可以创建一个类,但现在看不到任何用。

感谢您的澄清和建议。

答案 1 :(得分:-1)

首先,为什么?您位于Node中,因此从根本上讲,您的任何代码都无需查找节点构造是什么。它应该只关心能够找到您写的东西。

第二,您声明的是普通对象,而不是类实例,因此this关键字将从不指向该变量。它只能指向当前执行范围的所有者。

如果您想返回module.exports,则只需...做。要么直接,要么很奇怪,要么至少首先将您的出口作为真实商品捕获:

const mything = {
  test: function() {
    mything.say("hello");
  },
  say(text) {
    console.log(text);
  }
};

module.exports = mything;

但是从您的代码中,这不是您想要的。您想要是一个真实的课程:

class MyThing {
  test() {
    this.say('Hello.');
  }

  say(text) {
    console.log(text);
  }
};

module.exports = MyThing;

然后您应以以下方式致电:

const MyThing = require("./my-thing.js"); 
let mything = new MyThing();
mything.test();

答案 2 :(得分:-2)

感谢@Pointy,摆脱了破坏性分配并通过require('./utils.js').test();调用函数的方法。