描述可选的功能参数

Spe*_*und 3 javascript ecmascript-6

抓我的头试图让这个最佳.假设我有一个函数将对象作为参数并像这样破坏它:

myfunc = (options = {a:true, b:true, c:true}) => {...}
Run Code Online (Sandbox Code Playgroud)

默认情况下,ab和c为true.但是说我打电话,myfunc并希望b是假的:

myfunc({b:false})
Run Code Online (Sandbox Code Playgroud)

现在好了options.b === false,但a和c的值都消失了.有没有我可以完成这个而不必传递默认值的副本?

我尝试了一些奇怪的东西

myfunc = (options = Object.assign({a:true, b:true, c:true}, options)) =>{}
Run Code Online (Sandbox Code Playgroud)

但那当然不对.

Nin*_*olz 7

您可以使用具有默认值的所需属性的默认对象,而不使用默认值option.然后使用短手属性创建一个新的.

对于其他对象,您可以使用较新的或babeljs来保留对象的rest属性.

var myfunc = ({ a = true, b = true, c = true, ...rest } = {}) => {
        const option = { a, b, c, ...rest };
        console.log(option);
    };

myfunc();             // take {} as default and the default values inside of the object
myfunc({ b: false }); // take b and default values
myfunc({ foo: 42 });  // take foo and all default values
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)