首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"this“不返回module.exports

"this“不返回module.exports
EN

Stack Overflow用户
提问于 2019-04-06 16:37:39
回答 2查看 74关注 0票数 0

在下面使用Node.js v11.13.0的代码中,我收到了this.say is not a function的错误。

代码语言:javascript
复制
/* utils.js */
module.exports = {
  test: function() {
    this.say('Hello.');
  },

  say: function(text) {
    console.log(text);
  }
};
代码语言:javascript
复制
/* index.js */
const {test} = require('./utils.js');
test();

当我用使用this声明的函数记录function() {时,它似乎返回了Node.js创建的全局环境对象。如果我使用箭头函数,它将返回一个空对象。

为什么this不返回module.exports

代码只是一个例子,我实际上并没有使用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 22:46:58

从那时起,通过正确地使用module.exports来解决这个问题。这个问题背后的困惑之一是Visual说我的函数中的this应该是module.exports。如果我需要多次使用它,我会创建一个类,但是现在我发现没有用了。

谢谢你的澄清和建议。

票数 0
EN

Stack Overflow用户

发布于 2019-04-06 16:49:09

首先:,你为什么要这么做?您在Node中,所以您的任何代码都没有理由查找节点构造是什么。它应该只关心能找到你写的东西。

其次,您声明的是一个普通对象,而不是类实例,因此this关键字永远不会指向该变量。它只能指向当前执行范围的所有者。

如果你想回module.exports,那就.做。无论是直接的,这将是奇怪的,或至少通过将您的导出作为一个真实的东西,首先:

代码语言:javascript
复制
const mything = {
  test: function() {
    mything.say("hello");
  },
  say(text) {
    console.log(text);
  }
};

module.exports = mything;

但从你的代码来看,这不是你想要的。你想要的是一门真正的课程:

代码语言:javascript
复制
class MyThing {
  test() {
    this.say('Hello.');
  }

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

module.exports = MyThing;

然后,你应该将其称为:

代码语言:javascript
复制
const MyThing = require("./my-thing.js"); 
let mything = new MyThing();
mything.test();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55551163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档