首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数执行定义为参数

将函数执行定义为参数
EN

Stack Overflow用户
提问于 2020-01-02 13:13:08
回答 2查看 92关注 0票数 0

我从ES6中使用析构函数,我将函数执行定义为参数

这是一个例子

代码语言:javascript
复制
  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'))

有了毁灭,我们可以用

代码语言:javascript
复制
  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'))

代码语言:javascript
复制
  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() {本机代码}

我用

代码语言:javascript
复制
const reformatDate = ({getDate: dd = dd.call ,....

but same error :( 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-02 13:28:47

= dd()等语法不调用该方法,它只是设置一个默认参数。您需要自己在函数中调用这些方法。但是,不能仅仅调用非结构化函数,因为this将不再绑定到Date对象。为了做你想做的事,你需要保留原来的日期。可以这样做的一种方法是将日期两次传递给函数,或者使用一个对象并销毁date属性。然后,您需要在方法上使用.call()this重新分配到date对象,如下所示:

代码语言:javascript
复制
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对象上使用这些方法。此外,我发现在不破坏的情况下,要阅读和解释第一个示例要困难得多,因此,我非常喜欢您的第一个代码块,而不是这个方法。

票数 1
EN

Stack Overflow用户

发布于 2020-01-02 13:44:31

根据docs - MDN的说法,

如果没有传递值或未定义的值,默认函数参数允许使用默认值初始化命名参数。

例如,如果代码类似于:

代码语言:javascript
复制
function test(x = 10) {
  console.log(x);
}
test();
test(5)

如果x未被传递,则将应用默认设置。

在这种情况下,由于您对参数使用析构模式,如果解构后的值为undefined,则将应用默认设置。

以下为样本:

代码语言:javascript
复制
function test({x = 10, y = 20}) {
  console.log(x, y);
}
test({ y: 5 });
test({ x: 4, y: 11 })

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59563980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档