2017-10-18 64 views
1

我必須使用字符串來執行函數。所以我創建了一個新的函數,我把字符串。它的工作原理,但不是當我想打電話給在另一模塊中的特定功能:使用函數對象調用函數node.js

var mymodule = require('./mymodule'); 

...

mymodule.function(a, b); //Works 

var functionTest1= new Function('var a = 2; console.log(a*a);'); 
functionTest1(); //Works 

var functionTest2= new Function('mymodule.function(a, b)'); 
functionTest2(); //Doesn't work (error console : mymodule is not defined) 

我在做什麼錯?還有其他方法可以做到嗎?

+0

你爲什麼要做這個? *我必須使用字符串來執行函數。*爲什麼? – 2017-10-18 14:30:18

+0

因爲字符串來自一個觀察者的模塊。所以如果我想在未來的另一個行爲,我只需要添加另一個模塊觀察員,並寫一個字符串的新功能。 (我不知道這是否是最好的想法,但我發現這很靈活) – Kruwe

+0

你的例子在節點REPL中對我來說工作得很好。我意外地通過將myModule輸入爲myModule來錯誤地重現您的錯誤。也許這只是一個錯字? – chriskelly

回答

1

請試試這個:與功能構造函數創建

var functionTest3 = new Function('mymodule','a','b', 'mymodule.function(a, b)'); 
functionTest3(mymodule, a, b); 

的功能不會產生封閉 到他們的創作環境;它們始終在全球範圍內創建。在運行它們時,它們只能訪問自己的局部變量和全局局部變量,而不能調用函數構造函數調用的範圍中的那些局部變量和局部變量。

更多讀到這裏https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

+0

謝謝,它的工作! – Kruwe

+1

您可能想解釋爲什麼這會起作用和/或OP代碼的問題是什麼。 –

+0

@Felix Kling是的,當然 –