【问题标题】:Node js using "this" from function call within module.exports节点 js 使用 module.exports 中的函数调用中的“this”
【发布时间】:2018-11-21 07:40:09
【问题描述】:

我正在从 module.exports 函数中调用本地函数。如何访问exports this 对象?

exports.myVar = 'foo'

exports.myFunc = function() {
  localFunc()
}

function localFunc() {
  console.log(this.myVar) //Undefined
}

我尝试过使用localFunc().bind(this),但这也不起作用。任何帮助表示赞赏!

【问题讨论】:

  • 你想让this成为什么?
  • 我希望 this 成为 foo
  • foo在哪里?
  • 你的意思是你想让this成为exports

标签: javascript node.js scope this


【解决方案1】:

只需使用exports。或者将myVar 声明为变量,将其分配给导出并为localFunc 创建一个闭包。

this 仅在您进行事件绑定和/或创建对象时才真正有意义。

【讨论】:

  • localFunc 确实是该模块的私有函数,因此我不希望将其导出。您能否提供您所指的闭包示例?
【解决方案2】:

这就是我的工作:

function localFunc() {
   const self = exports;
   console.log(self.myVar);
}

exports.myVar = 'foo';

exports.myFunc = function () {
    localFunc();
}

【讨论】:

  • 或者你可以直接使用exports.myVar
【解决方案3】:

你可以试试这个:

var data = module.exports = {
  myVar: 'foo',

  myFunc: function() {
    localFunc();
  }
}

function localFunc() {
  console.log(data.myVar);
}

【讨论】:

    【解决方案4】:

    两种方法可以解决您的问题。

    第一个:

    exports.myVar = 'foo'
    
    exports.myFunc = function() {
      that = this;
      localFunc(that)
    }
    function localFunc(that) {
      console.log(that.myVar) //foo
    }
    

    第二个

    exports.myVar = 'foo'
    
    exports.myFunc = function() {
      localFunc()
    }
    
    localFunc = ()=> {
      console.log(this.myVar) //foo
    }
    

    【讨论】:

      【解决方案5】:

      localFunc.bind(this) 只返回一个新函数,即 localFunc 函数,但 this 绑定到括号中的任何内容。您需要将新函数(由 localFunc.bind 返回)实际分配回 localFunc。下面是两个简单的例子:

      exports.myVar = 'foo';
      
      exports.myFunc = function() {
          localFunc = localFunc.bind(this);
          localFunc();
      };
      
      function localFunc() {
          console.log(this.myVar);
      }
      

      或:

      exports.myVar = 'foo';
      
      exports.myFunc = function() {
          localFunc();
      };
      
      function localFunc() {
          console.log(this.myVar);
      }
      localFunc = localFunc.bind(exports);
      

      第二个选项可能比第一个更好,因为在第一个示例中,每次调用 export.myFunc 时都必须重新绑定函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-04
        • 2015-03-24
        • 1970-01-01
        • 2023-02-09
        • 2012-05-14
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多