【问题标题】:foo(bar) and foo(bar, baz) [closed]foo(bar) 和 foo(bar, baz) [关闭]
【发布时间】:2016-07-29 20:17:29
【问题描述】:

在 ES6 中,是否可以有这样的代码:

class MyClass
{
     foo(bar)
     {
          console.log(bar + "Bar")
     }
     foo(bar, baz)
     {
          console.log(bar + baz + "Bar baz")
     }
}

所以当我这样做的时候:

MyClass.foo("Hello, ", "World and ")

我会得到:

Hello, World and Bar baz

我可以做到:

MyClass.foo("Hello, world!")

得到:

Hello, world!Bar

喜欢 Java 吗?

【问题讨论】:

  • 只是好奇,你试过了吗?
  • 方法重载不存在。第二个foo 只会覆盖第一个,但是是的,你有没有尝试运行它?
  • 我会努力并给出结果。
  • 未捕获的类型错误:MyClass.foo 不是函数

标签: javascript ecmascript-6


【解决方案1】:

首先你需要 static 关键字,就像在 Java 中一样。

class MyClass
{
     static foo(bar)
     {
          console.log(bar + " World")
     }
}
MyClass.foo("Hello")

其次,JavaScript 不会重载方法。这种方式可以说更灵活——你可以自己处理参数。

class MyClass
{
     static foo(bar, baz)
     {
          if (baz) {
             console.log(bar + baz + " World");
          } else {
             console.log(bar + " World");
          }
     }
}
MyClass.foo("Hello")

【讨论】:

  • 谢谢,我可以试试这个,看看能不能得到我想要的结果。
【解决方案2】:

你可以使用default parameters

class MyClass
{
    static foo(bar, baz='')
    {
        console.log(bar + baz + "Bar" + (baz ? " baz" : ""));
    }
}

【讨论】:

    【解决方案3】:

    据我所知,这是不可能的,因为当您调用一个接受两个参数且只有一个参数的函数时,第二个参数将被设置为未定义。大多数 js 库通过检查传递的参数的类型来进行自己的重载,如果这将被实现,这可能会破坏这些库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2016-03-04
      • 2017-06-23
      • 2012-01-25
      相关资源
      最近更新 更多