将单个参数传递给具有默认值的函数

时间:2018-07-25 23:43:23

标签: javascript jquery ecmascript-6

我有一个javascript函数,看起来像: my_app.api.index = function(event, page = 1, sort = "last_name", desc = true, limit = 9999)

因此,这使用的是我们从ES6获得的出色的默认值。我想做的就是调用此函数,只传递一个值...或两个或三个,无论多少,而不必传递所有值。

类似: my_app.api.index(sort: sortField);

理想的行为是,它对其他参数使用默认值,但对命名参数使用传递的值。这是什么语法?甚至有可能吗?

2 个答案:

答案 0 :(得分:2)

您可以改为使用对象。 Object.assign()将覆盖您在参数中指定的值,所有其他参数将保持默认值:

my_app.api.index = function(options) {
    options = Object.assign({
       page: 1,
       sort: "last_name",
       desc: true,
       limit: 9999
    }, options);

致电:

my_app.api.index({sort: sortField});

答案 1 :(得分:2)

定义函数,使其接受单个 object (具有默认对象值),而不是参数列表。为了简化语法,在参数本身中对对象进行解构:

const myfn = ({ event='someevent', page=1, sort='lastName' }) => {
  console.log('fn running with ' + event + ' ' + page + ' ' + sort);
};
myfn({ sort:'firstName' });