【问题标题】:ES6 default values for only some of params object [duplicate]仅某些参数对象的ES6默认值[重复]
【发布时间】:2016-07-18 15:50:59
【问题描述】:

给定如下函数,为了能够调用 showToast({ text: "some text"}) 并仍然获得 params.autoHideparams.action 的默认值,使用什么正确语法?

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);
}

【问题讨论】:

    标签: ecmascript-6


    【解决方案1】:

    您也可以在参数列表中使用对象解构。唯一改变的是你不能通过params对象访问参数:

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

    babel/repl

    注意解构对象的= {} 默认值。这样就可以在没有单个参数的情况下调用函数:foo();

    【讨论】:

    • 赞成让我站在我的位置并教我一件事。谢谢!
    【解决方案2】:

    您可以使用参数对象解构来实现:

    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"

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2016-12-21
      • 2017-04-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多