节点js使用"这个"来自module.exports

时间:2018-06-12 01:38:04

标签: javascript node.js scope this

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

exports.myVar = 'foo'

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

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

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

5 个答案:

答案 0 :(得分:1)

这就是我的所作所为:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        ArrayList aList = new ArrayList() { 1 , 2, 1 };
        IEnumerable<int> result = aList.ToArray().ToList().Cast<int>().Where(v => v != 1).ToList();

        foreach(int item in result)
        {
            Console.WriteLine(item);
        }
    }
}

答案 1 :(得分:1)

你可以试试这个:

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

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

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

答案 2 :(得分:1)

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

第一个:

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
}

答案 3 :(得分:0)

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

this只有在您绑定事件和/或创建对象时才有意义。

答案 4 :(得分:0)

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时都必须重新绑定该函数。