使用下面的代码使用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() {
?
该代码仅是示例,我实际上并没有使用它。
答案 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();
调用函数的方法。