3

我可以在 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;
    }

所有的时间函数只调用第二个,如果有任何想法做这个

4

2 回答 2

6

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

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

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

function foo(a, b, opts) {

}


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

然后你可以用你的方法来处理它。[开关、if-else 等]

于 2013-05-22T07:38:39.123 回答
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"; 
  };
}

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

于 2013-05-22T07:41:18.643 回答