简单 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;
我已经创建了一个 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;