2016-02-17 2 views
19

Как настроить параметры по умолчанию в node.js?Параметры по умолчанию в node.js

Например, скажем, у меня есть функция, которая обычно выглядит примерно так:

function(anInt, aString, cb, aBool=true){ 
    if(bool){...;}else{...;} 
    cb(); 
} 

Назвать это будет выглядеть примерно так:

function(1, 'no', function(){ 
    ... 
}, false); 

или:

function(2, 'yes', function(){ 
    ... 
}); 

Однако, похоже, что node.js поддерживает параметры по умолчанию таким образом. Каков наилучший способ сделать это?

+3

Возможный дубликат http://stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function – migg

+0

вы могли бы использовать столпотворение и сохранить исходный код. –

+0

Возможный дубликат [Установить значение параметра по умолчанию для функции JavaScript] (https://stackoverflow.com/questions/894860/set-a-default-parameter-value-for-a-javascript-function) – mikemaccana

ответ

10

решение Простейшее есть внутри функции

var variable1 = typeof variable1 !== 'undefined' ? variable1 : default_value; 

Так этот путь, если пользователь не предоставил Variable1, заменить его значение по умолчанию.

В вашем случае:

function(anInt, aString, cb, aBool) { 
    aBool = typeof aBool !== 'undefined' ? aBool : true; 
    if(bool){...;}else{...;} 
    cb(); 
} 
1

Вы можете использовать bind создать новую функцию, которая уже имеет набор аргументов, переданных в него:

fn1 = fn.bind(fn, 1, 'no', function(){}, false); 
fn1(); 
fn2 = fn.bind(fn, 2, 'yes', function(){}); 
fn2(true); 

В качестве альтернативы, LANGUES как CoffeeScript что компилировать в JavaScript предоставляют механизмы, которые поддерживают параметры по умолчанию без использования bind:

CoffeeScript: 

fn = (bar='foo') -> 

JavaScript: 

fn = function(bar) { 
    if (bar == null) { 
    bar = 'foo'; 
    } 
}; 
3

См github issue. Вы можете включить параметры по умолчанию в текущей версии узла (f.ex. 5.8.0) с помощью --harmony_default_parameters

node --harmony_default_parameters --eval "const t = function(i = 42) { return i }; console.log(t());" 

[...]

Он будет включен по умолчанию в v6.0

39

2017 г. ответ: узел 6 и выше в настоящее время включает в себя параметры по умолчанию ES6

var sayMessage = function(message='This is a default message.') { 
    console.log(message); 
} 
Смежные вопросы