2017-04-14 63 views
1

如何在JavaScript中實現Revealing模塊模式時將參數傳遞給函數。我有這樣將參數傳遞到Javascript中的揭示模塊模式中

var GlobalModule = (function() { 
    function consoleLog(textToOutput) { 
     console.log(textToOutput); 
    } 

    return { 
     consoleLog: consoleLog() 
    }; 
})(); 

一個模塊後來,當我運行GlobalModule.consoleLog("Dummy text");,我得到undefined作爲輸出。

回答

1

與函數執行返回的對象

var GlobalModule = (function() { 
 
    return { 
 
    consoleLog: function(textToOutput) 
 
    { 
 
    console.log(textToOutput); 
 
    } 
 
    } 
 
})(); 
 

 
GlobalModule.consoleLog("Dummy text");

根本就喜歡達到了這個相同的輸出裏面。 object => function call。沒有需要返回對象

var GlobalModule ={ 
 
     consoleLog: function(textToOutput) { 
 
            console.log(textToOutput); 
 
            } 
 
     } 
 

 
    GlobalModule.consoleLog("Dummy text");

+0

但是如果你不想調用方法或屬性模塊,即我想做'myRevealingModule('my-string')',而不是'myRevealingModule.doSomething('my-string')'。 –

+0

@RonRoyston你需要一個直接的函數調用。[看這個小提琴](https://jsfiddle.net/poosanth/coshzhra/) – prasanth

+1

沒錯。我過度思考。謝謝@prasad。 –

1

更改線路

consoleLog: consoleLog() 

consoleLog: consoleLog 

甚至(ES6)到:

consoleLog 
1
return { 
    consoleLog: consoleLog() 
}; 

你的代碼的一部分是錯誤的。 由於函數結尾處的()(您希望將函數自身導出到此處),您正在導出consoleLog調用的結果。 所以只是刪除函數調用:

return { 
    consoleLog: consoleLog 
}; 
0

你可以這樣做

var GlobalModule = (function() { 
    function consoleLog(textToOutput) { 
     console.log(textToOutput); 
    } 

    return { 
     consoleLog: consoleLog //() is removed otherwise it will execute immediately 
    }; 
})(); 

GlobalModule.consoleLog('Hello') 

DEMO

你要通過全局變量傳遞在IIFE的括號

var GlobalModule = (function(x) { 
    function consoleLog(textToOutput) { 
     console.log(textToOutput,x); // will log Hello temp 
    } 
    return { 
     consoleLog: consoleLog 
    }; 
})('temp');