And*_*ips 4 javascript node.js
我已经阅读了很多关于如何在node.js中创建模块的文章,你可以使用module.exports将模块内部公开给包含它的文件.真棒!
这是怎么回事?我将使用以下作为示例:-)
USER.JS
function User() {
this.property = 'value';
this.doSomething = function() {
var getStuff = mainFileFunction();
// do something with getStuff
}
module.exports = User;
Run Code Online (Sandbox Code Playgroud)
MAIN.JS
var myArray = [];
myArray.push('something');
myArray.push('something else');
mainFileFunction() {
for(thing in myArray) {
return myArray[thing];
}
}
var u = new user();
log(u.property); <--- THIS IS EXPOSED, COOL!
u.doSomething(); <--- This will throw an error because mainFileFunction is not defined in user.js :-(
Run Code Online (Sandbox Code Playgroud)
如果我将mainFileFunction移动到用户文件,那么它仍然无法工作,因为myArray数组不会被定义...如果我也将它移动到那里,我将无法在主要的其他功能(我想):-)
我很抱歉,如果我错过了一些非常明显的东西......我想要的是从我包含的模块中公开我选择的部分(module.export适用于此)但我也希望从主文件中公开所有内容所有包括..
或者只是把一切都暴露在一切?那是完全凌乱和可怕的吗?
只是为了解释我在这里尝试做什么...我希望在单独的文件中定义类,但我想将它们实例化为主文件中的对象并将它们存储在数组中.我希望对象能够包含可以访问其他对象类型的数组的方法.
多谢你们!:-)
您可以使用全局变量,或者具有适当的循环依赖性(require两个文件),但这通常是一个坏习惯,可能导致将来出现可维护性问题.
相反,您可以使用依赖注入并注入doSomething模块.这基本上免费提供以下内容:
User使用doSomething稍后的简单模拟实现进行测试,并验证代码的正确性我将提供两个实现,一个使用构造函数依赖注入,另一个使用模块范围设置.
USER.JS
function User(dependentFunction) {
this.property = 'value';
this.doSomething = function() {
var getStuff = dependentFunction();
// do something with getStuff
}
}
module.exports = User;
MAIN.JS
...
var u = new User(mainFileFunction);
u.doSomething(); // this will now work, using mainFileFunction
Run Code Online (Sandbox Code Playgroud)
这里发生的事情相当简单,我们知道发生了什么.
这也可以是模块范围设置
USER.JS
function User(depFunc) {
this.property = 'value';
this.doSomething = function() {
var getStuff = depFunc();
// do something with getStuff
}
}
function UserFactory(depFunc){
return function(){
return new User(depFunc);
}
}
module.exports = UserFactory;
MAIN.JS
var getUser = UserFactory(mainFileFunction);
var u = getUser(); // will return a new user with the right function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3485 次 |
| 最近记录: |