2017-12-20 4 views
0

私はしばらくの間グーグルで行ってきましたが、ES5でデフォルトパラメータを設定する多くの独創的な方法が見つかりました& ES6しかし、私はまだデフォルトを上書きする簡単な例を見ていませんJavaScriptのパラメータこの例を見てみましょう:JavaSciptのデフォルトパラメータをオーバーライドする方法

new Connection(host, port = 25575, password, timeout = 5000)

デフォルトのタイムアウトは結構ですが、ポート番号ではありません。二番目のパラメータがpasswordであると想定されるため、認証エラーで

myConnection = connFactory.getConnection(process.env.IP, 
             process.env.PORT, 
             process.env.PASSWORD) 

このコード結果:この関数をコールすると、JavaScriptは常にpasswordパラメータとして二番目のパラメータを扱います。どのようにしてportのデフォルトパラメータを無効にすることができますか?元の関数定義を変更しないでください。

+0

「新しい接続(ホスト、ポート= 25575、パスワード、タイムアウト= 5000)」これはどのような構文ですか?あなたのコードのより完全な例を私たちに見せてもらえますか? 'getConnection'がどのように見えるかわからないので、どうすればそれを手伝うことができますか? – JLRishe

+0

独自の関数で関数をラップすると、パラメータの順序を変更できます。 –

+2

そうではありません。この[fiddle](https://jsfiddle.net/wd1oh8o7/)では、デフォルトのパラメータが正確に使用され、2番目のパラメータは 'port'として使用されます。だから私は問題が他のどこかにあると思います。問題を再現できる最小限の例を作成してください。 –

答えて

4

configオブジェクトを関数のパラメータとして使用できます。例:

function foo({a='SO', b}) { 
    console.log(a, b) 
} 

foo({b: 'Yeap', a: 'baz'}) // baz Yeap 
foo({b: 'foo'}) // SO foo 

注文を保証します。

+0

優れています。 – Egee

0

「getConnection」はあなたの関数ではないが、到達できないものから来ていると仮定すると、動作することを保証するいくつかのソリューションの1つがここにあります。これは、すべてのパラメータを準備するタスクです。

function getConnectionRunner(host, password, optional = {port: 25575, timeout: 5000}) { 
    const port = optional.port || 25575; 
    const timeout = optional.timeout || 5000; 

    connFactory.getConnection(host, port, password, timeout); 
} 
関連する問題