2016-08-12 168 views
1

我試圖測試這個模塊:更改功能範圍

function fa(){ 
    return "function A" 
} 
function fb(){ 
    return "function B + " + fa() 
} 
module.exports = {fa, fb} 

我這樣測試:

​​3210

它實際上是顯示 「功能的B +功能的」

如果我用return "function B + " + this.fa()替換fb的方法體(注意this.的添加),然後按預期工作。

有沒有辦法模擬一個沒有用this調用的函數?

回答

0

有沒有方便的方法來做到這一點。您可以創建一個對象並將其用作參考,因此您將該函數作爲「方法」調用

會發生什麼情況是您將該函數調用爲「函數」,函數本身與您的函數本身不同正在出口。

該閱讀可以澄清更多關於我所說的。 Understanding 'this' keyword

+0

嗯我很抱歉,但不僅僅是它不回答我的問題,我相信這也是不正確的。我輸出的功能與原點完全相同。問題存在於fa如何解決,無論是通過此引用還是通過本地範圍。我知道如何處理'this',但我不知道如何更改函數範圍。綁定一個新的上下文,無論是通過「綁定」還是使用「with」關鍵字都不起作用。 – tibo

+0

你是對的,它是相同的功能。但是當你對myModule.fa進行模擬時,「fa」函數就屬於myModule對象。並且當您調用myModule.fb()時,「fa」函數不屬於myModule對象,因爲您將它作爲函數調用 –

+0

對於不面對這些引用問題,並且不要使用'this'關鍵字,我通常寫我的代碼,如: var exportObject = {}; exportObject.fa = function fa(){ return'function A'; }; exportObject.fb = function fb(){ return'function B +'+ exportObject.fa(); }; module.exports = exportObject; –