2012-09-18 73 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';