2016-07-18 2 views
2

Для функции, подобной следующей, какой правильный синтаксис использовать для того, чтобы можно было позвонить showToast({ text: "some text"}) и по-прежнему получать значения по умолчанию для params.autoHide и params.action?Значения по умолчанию для ES6 только для некоторых объектов params

function showToast (params = {text: 'Something happened!', autoHide: false, action: 'CLOSE'}) { 
    //noinspection JSUnresolvedFunction 
    const toast = $mdToast.simple() 
     .textContent(params.text) 
     .position('top right') 
    ; 

    if (!params.autoHide) { 
     toast.hideDelay(false); 
    } 
    if (params.action) { 
     //noinspection JSValidateTypes 
     toast.action(params.action); // label for close btn 
    } 

    $mdToast.show(toast); 
} 

ответ

2

Вы также можете использовать деструктурирование объектов в списке аргументов. Единственное, что меняется, что вы не должны получить доступ к параметрам через params объекта:

function foo({text = "Hi", autoHide = false, action = "CLOSE"} = {}) { 
 
    console.log(text + " " + autoHide + " " + action) 
 
} 
 

 
foo({text: "asd"});

См babel/repl.

Обратите внимание на значение по умолчанию для объекта деструктуризации = {}. Это позволяет вызывать функцию без одного параметра: foo();.

+0

Upvote для того, чтобы поставить меня на место и научить меня чему-то. Благодаря! – Yoda

1

Вы можете использовать параметр объекта деструктурирующие для достижения этой цели:

function showToast({text = 'Something happened!', autoHide = false, action = 'CLOSE'} = {}) { 
    //noinspection JSUnresolvedFunction 
    const toast = $mdToast.simple().textContent(text).position('top right'); 

    if (!autoHide) { 
     toast.hideDelay(false); 
    } 
    if (action) { 
     //noinspection JSValidateTypes 
     toast.action(action); // label for close btn 
    } 

    $mdToast.show(toast); 
} 

showToast({ text: "some text" }) // defaults autoHide to false, action to 'CLOSE' 

См "Setting a function parameter's default value".

Смежные вопросы