foo(bar)和foo(bar,baz)

时间:2016-07-29 20:17:30

标签: javascript ecmascript-6

在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中一样?

3 个答案:

答案 0 :(得分:2)

首先,您需要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")

答案 1 :(得分:0)

您可以使用default parameters

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

答案 2 :(得分:0)

据我所知,由于当你调用只接受一个参数的两个参数的函数时,第二个将被设置为undefined,因此不可能。大多数js库通过检查传递的参数类型来做自己的重载风格,如果实现这种情况,这可能会破坏这些库。