如何使模块函数访问node.js

时间:2018-01-31 04:10:34

标签: node.js

我正在尝试使用更加面向对象的方法,使用node.js“嵌入”函数(如果这是正确的单词),这样我就可以像使用对象上下文一样使用函数和对象。在代码中显示可能更容易。

我意识到你可以在构造函数中分配单个函数 - 这可以工作..但我不知道如何为所有函数分配一个具有函数的整个模块可以访问对象上下文中的值。

所以,我的问题是:我如何将一个模块分配给一个类,以便模块中的所有函数都可以访问对象上下文中的所有内容。

app.js

const myFunctions = require('./functions');

class myClass{
    constructor() {
        this.myFunctions = myFunctions ;
    }
}

var mc = new myClass();
mc.myObject = { aaa: 'test'}
mc.myFunctions.outputValue(); // << should output the previous value set.

functions.js

function outputValue(){
    console.log(this.myObject)
}
module.exports = {
    outputValue
}

2 个答案:

答案 0 :(得分:0)

你可以用两种方式做到:

1 - 将您的类实例this绑定到每个外部函数:

class myClass {
  constructor() {
    this.myFunctions = {
      outputValue: myFunctions.outputValue.bind(this),
    };
  }
}

2 - 在类中定义一个方法来调用外部函数,例如:

class myClass {
  constructor() {
  }

  callFunction(fnName) {
    const fn = myFunctions[fnName];

    if (fn) fn.apply(this);
  }
}

说我会建议完全避免使用类和this(至少它是完全必要的)而是使用纯函数,只接收参数的函数会进行一些处理并返回一些值。

答案 1 :(得分:0)

执行此操作的最佳方法也遵循注射模式,

const myClass = new myClass(myFunctions);
myClass.outputValue.bind(myClass);

这里绑定并注入所有类对象,以便不同类中的其他方法可以访问它们。

注意:请查看&#34; bind&#34; 用法。