【问题标题】:method and function overloads in javascript and jqueryjavascript和jquery中的方法和函数重载
【发布时间】:2013-05-22 07:35:25
【问题描述】:

我可以在 java-script 和 JQuery 中使用方法和函数重载吗?如果可能的话,这意味着如何做到这一点。

我开发了以下代码,但我认为这是错误的,我的错误是什么我不知道,请澄清

    function isnull(txtid, errid, err) {  
        if (trimString(get(txtid).value) == '') {
            return false;
        }
        return true;
    }

    function isnull(txtid) {
        if (trimString(get(txtid).value) == '') {        
            return false;
        }
        return true;
    }

所有的时间函数只调用第二个,如果有什么想法可以做这个

【问题讨论】:

标签: java javascript jquery methods overloading


【解决方案1】:

在 JavaScript 中没有真正的函数重载,因为 javascript 没有对参数或所需数量的参数进行类型检查,你可以只拥有一个 isnull 的实现,它可以适应传递的参数通过检查参数的类型、存在或数量来找到它。

使用参数进行函数重载的最佳方法是不检查参数长度或类型;检查类型只会让你的代码变慢,并且你会享受到数组、空值、对象等的乐趣。

大多数开发人员所做的是将对象作为其方法的最后一个参数。这个对象可以容纳任何东西。

function foo(a, b, opts) {

}


foo(1, 2, {"method":"add"});
foo(3, 4, {"test":"equals", "bar":"tree"});

然后你可以在你的方法中以任何你想要的方式处理它。 [开关、if-else 等]

【讨论】:

  • 请详细说明“通过检查参数的类型、存在或数量传递给它”
  • 是的,Raje 的详细说明出现在我的答案的链接中。
  • 他的意思是:f(a:Int){bla;} 和 f(b:String){blu;} 对于 JS 是完全一样的,所以他会进入他能找到的第一个 f 函数--> 显然他总是执行“bla”。您需要在唯一的 f 函数中检查类型: f(arg:Object){if(typeof(arg)==='String') blu;否则 if(typeof(arg)==='Integer') bla; else alert('not implemented');} [这里的代码不准确]。你真的应该考虑使用带有通用选项的黑蜂答案
【解决方案2】:

重载的一个技巧是这样的:

function over_load(object, name, args) {
  var prev = object[name];
  object[name] = function(){
  if (args.length == arguments.length)
    return fn.apply(this, arguments);
  else if (typeof prev == 'function')
    return prev.apply(this, arguments);
  else throw "Wrong number of args"; 
  };
}

但根据答案Function overloading in Javascript - Best practices ,检查参数长度会使其变慢,因此有一种更好的方法来实现重载,即通过传递一个对象..(查看链接以供参考)

【讨论】:

  • 是的,我很久以前就读到了.. 非常感谢您先生.. 指出了这一点,但必须分享知识,我无法继续发现新事物...
  • @ShreyosAdikari 现在可以了吗?
猜你喜欢
  • 2021-12-28
  • 2013-01-01
  • 1970-01-01
  • 2016-10-25
  • 2012-01-05
  • 2020-09-20
  • 2015-11-08
  • 2018-12-26
  • 1970-01-01
相关资源
最近更新 更多