2015-11-23 56 views
0

如何使私人功能可以訪問另一個文件。我有以下兩個文件,我試圖訪問File2.js中的msg()。我怎樣才能做到這一點無需在File1.js使私人功能可以訪問外部文件

File1.js 
    function test() { 

    } 
    test.prototype.first = function() { 
     msg("abc"); 
    } 
    function msg(name) { 
     console.log("hello " + name); 
    } 
    module.exports = test; 

File2.js 
var test = require("./File1"); 
console.log(test.msg("xyz")) 

我收到錯誤的任何變化

TypeError: undefined is not a function

+0

您可以將'msg'函數放入'test'函數中,或者將其添加到'test'函數的原型中。如果您不想修改File1,js,那麼請嘗試調用'first'函數,而不是調用'msg'函數,因爲該函數已經在'test'函數的原型中,但要小心,因爲'first'函數不接受參數並具有硬編碼的「abc」。 – jmugz3

+0

當某個文件可以在另一個文件中訪問時,它不是私人的 –

回答

0

我不是JavaScript的程序員,但你的味精功能外測試班組長。

因此,您需要使用原型或將此函數放在test()函數內使其工作。

您的MSG()更改爲

test.prototype.msg = function(name) { 
    console.log("hello " + name); 
} 

而且,因爲它已經有CONSOLE.LOG裏面,你可以使用它,就像下面

test.msg("xyz"); 

,它應該被打印到控制檯

0

可能有很多方法來處理這種情況,但在這裏我將如何處理代碼中的一些修改:

我不認爲這是嚴格講私人的方法,測試函數是某種構造函數和msg函數是不可訪問的,直到您導出它。
我也是在味精原型改變的console.log聲明,因爲它是不確定的。

File1.js 
    function test() { 

    } 
    test.prototype.first = function() { 
     msg("abc"); 
    }; 
    test.prototype.msg = function(name) { 
     return("hello " + name); 
    }; 

    module.exports = test; 


File2.js 
    var Test = require("./File1"); 
    test = new Test(); 
    console.log(test.msg("xyz")); 
0

我「認爲」你想要的東西類似於C++中的朋友函數。我會認爲這是一個代碼氣味,因爲它打破封裝。無論如何,Javascript不支持這個概念AFAIK。

此外,即使您在File2.js中調用test.first(),也會發生錯誤。這是因爲您尚未使用您在File1.js中導出的​​構造函數實際創建對象。最終,沒有辦法在不修改第一個文件的情況下執行所需操作。在當前實現中最直接的方法是將其添加到原型中,以便模塊的每個對象實例都可以獲取它。但是,像其他人一樣,您的功能不再被視爲私密。

如果它是一個「靜態」實用功能,您可以提取另一個文件(即util.js),將其導出到對象文本中。