我从ES6中使用析构函数,我将函数执行定义为参数
这是一个例子
reformatDate(date: Date) {
const dd = date.getDate();
const mm = date.getMonth() + 1;
const yyyy = date.getFullYear();
return `${yyyy}-${mm < 10 ? '0' + mm : mm}-${dd < 10 ? '0' + dd : dd}`;
}
reformatDate(new Date('2013-3-3'))有了毁灭,我们可以用
const reformatDate = ({getDate: dd = dd(), getMonth: mm = mm(), getFullYear:yyyy=yyyy() }) =>
`${yyyy}-${mm < 10 ? '0' + mm : mm}-${dd < 10 ? '0' + dd : dd}`;
reformatDate(new Date('2013-3-3'))
const reformatDate = ({getDate: dd = dd(), getMonth: mm = mm(), getFullYear:yyyy=yyyy() }) => `${yyyy}-${mm < 10 ? '0' + mm : mm}-${dd < 10 ? '0' + dd : dd}`;
console.log(reformatDate(new Date('2013-3-3')))
但也有一些错误
函数getFullYear() {本机代码}-function getMonth() {本机代码}-function getDate() {本机代码}
我用
const reformatDate = ({getDate: dd = dd.call ,....
but same error :( 发布于 2020-01-02 13:28:47
= dd()等语法不调用该方法,它只是设置一个默认参数。您需要自己在函数中调用这些方法。但是,不能仅仅调用非结构化函数,因为this将不再绑定到Date对象。为了做你想做的事,你需要保留原来的日期。可以这样做的一种方法是将日期两次传递给函数,或者使用一个对象并销毁date属性。然后,您需要在方法上使用.call()将this重新分配到date对象,如下所示:
const reformatDate =
({d, d: {getDate: dd, getMonth: mm , getFullYear:yyyy}}) => `${yyyy.call(d)}-${mm.call(d) < 10 ? '0' + mm.call(d) : mm.call(d)}-${dd.call(d) < 10 ? '0' + dd.call(d) : dd.call(d)}`;
console.log(reformatDate({d: new Date('2013-3-3')}))
但是,这在本质上违背了一开始破坏结构的目的,因为您可以直接在date对象上使用这些方法。此外,我发现在不破坏的情况下,要阅读和解释第一个示例要困难得多,因此,我非常喜欢您的第一个代码块,而不是这个方法。
发布于 2020-01-02 13:44:31
根据docs - MDN的说法,
如果没有传递值或未定义的值,默认函数参数允许使用默认值初始化命名参数。
例如,如果代码类似于:
function test(x = 10) {
console.log(x);
}
test();
test(5)
如果x未被传递,则将应用默认设置。
在这种情况下,由于您对参数使用析构模式,如果解构后的值为undefined,则将应用默认设置。
以下为样本:
function test({x = 10, y = 20}) {
console.log(x, y);
}
test({ y: 5 });
test({ x: 4, y: 11 })
https://stackoverflow.com/questions/59563980
复制相似问题