2015-04-05 76 views
-2

試圖創建一個小模塊導出。我要求var myFunc() = function()...完好無損,我試圖製作的代碼模塊非常複雜。未定義不是函數:模塊導出

這裏是文件js/test.js

module.exports = { 
    app: function() { 
     var myFunc = function (arg) { 
      return 'working '+arg; 
     } 
    } 
};  

與運行:

var test = require('./js/test.js'); 
console.log(test.app.myFunc('now')); 

以下是錯誤:

test.app.myFunc(); 
     ^
TypeError: undefined is not a function 
+0

好的。什麼是'應用程序'?我的意思是它有什麼? – thefourtheye 2015-04-05 12:15:49

+0

@thefourtheye我想以某種方式調用myFunc()。 'app'只是一個隨機的名字。 – 2015-04-05 12:16:50

+0

應用程序是一個功能,你需要調用它。 – 2015-04-05 12:17:41

回答

1

在您的例子myFunc是功能app,不是成員的一個局部變量,從而app.myFunc(您不能以這種方式訪問​​一個函數的局部成員是不可用的。或者就此而言)。如果module.exports.app絕對必須是一個函數,而不是,比方說,一個對象,你可以這樣做:

module.exports = { 
    app: function() { 
    } 
}; 
module.exports.app.myFunc = function(arg) { 
    return 'working '+arg; 
}; 

然而,這將是更加健壯的app簡單地是一個文本對象:

module.exports = { 
    app: { 
     myFunc: function(arg) { 
      return 'working '+arg; 
     } 
    } 
}; 

另外,如果你需要myFunc取決於變量內部app(雖然這不應該是必要的,因爲模塊已經暗示封裝):

module.exports = { 
    app: (function() { 
     var _internal = 'working '; 
     return { 
      myFunc: function(arg) { 
       return _internal+arg; 
      } 
     }; 
    })() 
}; 

如果需要myFunc依靠傳遞給app參數:

module.exports = { 
    app: (function(passed) { 
     return { 
      myFunc: function(arg) { 
       return passed+arg; 
      } 
     }; 
    })() 
}; 

然後你把它作爲

var test = require('./js/test.js'); 
console.log(test.app('working ').myFunc('now')); 

這是所有我能想到的選項。如果這仍然不能回答你的問題,那麼如果你解釋你想要改善一點,這將會有所幫助。

+0

你完美回答了,謝謝! – 2015-04-05 13:11:01

2

你應該這樣做的工作:

module.exports = { 
    app: { 
     myFunc : function() { 
      console.log('working'); 
     } 
    } 
}; 

,然後你將可以用這個運行:

var test = require('./js/test.js'); 
test.app.myFunc(); 
+0

好的,我很抱歉,我已經更新了這個問題,現在就展示一個更好的例子! – 2015-04-05 12:26:47

0

我不明白的代碼複雜了這麼多的重點是,但儘管如此,如果你想它進一步複雜化,你可以這樣做

module.exports = { 
    app: (function() { 
     var myFunc = function (arg) { 
      return 'working '+arg; 
     } 

     return {myFunc: myFunc} 
    }()) 
};  
+0

不幸的是,我試圖創建一個現有的JavaScript文件模塊。它堅持使用'var myFunc()',不要誤解我的意思,如果我寫了它,我會從一開始就做正確的事,但作者使它變得複雜。 – 2015-04-05 12:36:36

+0

@KarlMorrison那麼爲什麼其他答案不適合你? – 2015-04-05 12:38:45

+0

目前正在實施它! – 2015-04-05 12:39:18