我可以在Javascript中覆盖吗?

时间:2015-07-14 01:55:55

标签: javascript

如何创建像这样的对象

var sum = {

  a : 5,
  b : 7,  
  sumar : function()
  {
    return (this.a+this.b);
  },
  sumar : function(a, b)
  {
    return (a+b);
  }

}

然后使用这样声明的任何方法?

sumar0 = sum.sumar(); //use the method without parameters
sumar1 = sum.sumar(6,7); //use the method with parameters.

就像"覆盖"方法?这有可能吗?

提前致谢并抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

在Javascript中,不要像在其他语言中那样使用不同的args声明两个同名的方法。相反,您只使用名称声明一个方法,然后在调用函数时检查参数以确定应遵循的行为。

当您声明两个具有完全相同名称的属性时,解释器会忽略其中一个属性,因为Javascript中任何给定属性只能有一个值。

Javascript中有一些关于重载的详细描述,其中有很多例子:

How to overload functions in javascript?

在您的特定情况下,您可以测试传递给方法的多少参数并相应地进行分支:

var sum = {

  a : 5,
  b : 7,  
  sumar : function(a, b)
  {
    if (arguments.length < 2) {
      // no arguments passed, use instance variables
      return (this.a+this.b);
    } else {
      // arguments were passed, use them
      return (a+b);
    }
  }

}

document.write(sum.sumar() + "<br>");
document.write(sum.sumar(6, 7) + "<br>");

但是,我必须说,这是一种特别奇怪的方法,有时会对实例属性进行操作,有时则不会。