2012-09-18 71 views
8

假设我有一个包含javascript对象的.js文件。我希望能够从同一目录中的另一个.js文件访问该对象及其所有功能。我可以简单地将此对象与module.exports对象和require()导出到其他.js文件中吗?如果这是可能的,你能给我一个例子吗?使用导出对象导出对象

如果它有帮助,我正在开发与节点。

回答

12

这是我创建模块的方式:

myModule.js

var MyObject = function() { 

    // This is private because it is not being return 
    var _privateFunction = function(param1, param2) { 
     ... 
     return; 
    } 

    var function1 = function(param1, callback) { 
     ... 
     callback(err, results);  
    } 

    var function2 = function(param1, param2, callback) { 
     ... 
     callback(err, results);  
    } 

    return { 
     function1: function1 
     ,function2: function2 
    } 
}(); 

module.exports = MyObject; 

而在另一个JS文件中使用这个模块,你可以简单地使用require和使用对象为正常:

someFile.js

var myObject = require('myModule'); 

myObject.function1(param1, function(err, result) { 
    ... 
}); 
+0

因此,如果在节点中,我没有返回对象定义结尾的函数,我将无法访问(私有)函数?即使我需要模块? –

+0

正确,您将无法通过对象访问它们。 'myObject._privateFunction(p1,p2)'会抛出一个错误'TypeError:Object# has no method'_privateFunction'' – c0deNinja

2

在一个文件中:

module.exports.myObj = some object...; 

在其他:在节点中的JS文件

Obj = require('myFile.js').myObj; 

一切都是局部的文件,除非你把它的出口对象。这实际上与浏览器中的JavaScript非常不同 - 在浏览器中,所有导入的文件都像一个大文件一样起作用。

您可以考虑节点文件,就好像您正在创建一个模块对象并将它传递给围绕您的代码的函数。

module = { 'exports' : {} }; 
(function(module){ 
    //your js file 
    ... 
})(module) 
2

当然可以。在我的例子中,我使用obj来保存我的配置信息。我把它放在config文件夹中的index.js文件中。这使得该指数成为当我选择时首选的指数。我有2个输出在这里为我的节点和api的东西,另一个为我的分贝。您可以忽略设置环境的第一位。

const environment = { 
    development: { 
    isProduction: false 
    }, 
    production: { 
    isProduction: true 
    } 
}[ process.env.NODE_ENV || 'development' ]; 

export default Object.assign({ 
    host: 'localhost', 
    port: '3000', 
    remoteApi: { 
    token: { 
     'X-Token': '222222222222222222' 
    }, 
    base: 'https://www.somedomain.com/api' 
    } 
}, environment); 

export const db = { 
    dbHost: 'localhost', 
    dbPort: 176178 
}; 

调用import config from '../config';将选择默认值。如果我指定我可以得到db出口import { db } from '../config';