简单 Javascript/NodeJS 问题

Simple Javascript/NodeJS issue

我已经创建了一个 require 模块,我在 'required' 构造函数应该自动接收任何参数值时实例化所有变量和函数,并且 return 该对象指向调用所需模块的文件.我可能没有解释正确,所以这里有一个例子:

var test = require('./testFramework'); //this works fine
var socketIo = new require('./socketIoTests')(test); //<<this does not work

最后,socketIo 仍未定义。

socketIoTest.js 文件中的 module.exports 简化为:

var socketIo = function(testFramework){
    var test = testFramework
    this.someArray = [...];

    this.testSockets = function(){...}
}

module.exports = socketIo;

现在正如您想象的那样,因为我正在创建一个对象,所以可以执行以下操作并且它完全符合我的预期:

var test = require('./testFramework');
var socketIo = require('./socketIoTests');

var newObj = new socketIo(test); //<<this works

这里是变量 newObj,returns 与我期望的对象和 public 属性,但是有没有办法用类似的东西来减少这一步:

var socketIo = new require('./socketIoTests')(test);

我怀疑这要么真的很简单,我需要更好地学习 javascript 要么这是不可能的。

你可以让你的 module.exports 成为一个函数,这样你就可以做 require('./socketIoTests')(test); 那种事情。

按照下面的方式制作你的模块

module.exports = function (theParam) {

    // Do something with the param ...
    // var yourDesiredValue = ...

    return yourDesiredValue;
}
var socketIo = new (require('./socketIoTests'))(test);

应该可以正常工作。

您的 socketIo 函数不是构造函数。它只是一个函数。要让它发挥构造函数的作用,您需要使用 new。如果您想避免使用 new,您可以简单地在函数中创建一个对象,将所有属性附加到该对象而不是 this 和 return 对象。

var socketIo = function(testFramework){
    var test = testFramework;
    var socketIoObject = {};
    socketIoObject.someArray = [...];

    socketIoObject.testSockets = function(){...}

    return socketIoObject;
}

module.exports = socketIo;