在下面使用Node.js v11.13.0的代码中,我收到了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();当我用使用this声明的函数记录function() {时,它似乎返回了Node.js创建的全局环境对象。如果我使用箭头函数,它将返回一个空对象。
为什么this不返回module.exports
代码只是一个例子,我实际上并没有使用它。
发布于 2019-04-10 22:46:58
从那时起,通过正确地使用module.exports来解决这个问题。这个问题背后的困惑之一是Visual说我的函数中的this应该是module.exports。如果我需要多次使用它,我会创建一个类,但是现在我发现没有用了。
谢谢你的澄清和建议。
发布于 2019-04-06 16:49:09
首先:,,你为什么要这么做?您在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();https://stackoverflow.com/questions/55551163
复制相似问题