你使用“假”函数在JavaScript中重载?

这个问题在这里已经有了答案:

  • JavaScript中的函数重载 - 最佳实践29个答案

  • 在JavaScript中,传递参数的趋势是对象的属性,即有一个参数是对象,因此您可以按任意顺序指定任何内容。 有了这种方法,你可以检查'未定义的,你的功能可以按照。

    如果你在不同情况下有相当大的行为,你可以扩展这个想法,把每个案例分解成一个单独的函数,然后由你的主“重载”函数调用。

    例如:

    function a (params) {
        // do for a
    }
    function b () {
        // do for b
    }
    function main (obj) {
        if (typeof obj.someparam != 'undefined') {
            a(whatever-params);
        } else if (typeof obj.someotherparam != 'undefined') {
            b(whatever-params);
        }
    }
    

    您也可以使用基于数字参数或参数数量的相同方法。 你可以阅读关于在这里使用参数。


    JavaScript 支持函数重载。 虽然它允许你传递可变数量的参数。

    你必须检查内部function多少arguments传递以及它们的类型是什么。


    这很常见,甚至没有提到。

    例如,在JQuery中, on()方法具有多个呼叫签名:

    .on( events [, selector ] [, data ], handler(eventObject) )
    .on( events [, selector ] [, data ] )
    

    对第一个窗体的调用看起来像$('sel').on('click', function(e){/*handler*/}) 。 对第二个窗体的调用看起来像$('sel').on({click: function(e){/*click handler*/}, mouseover: function(e){/*mouseover handler*/}) 。 请注意,这在Java / C#术语中演示了“多态性”(即不同类型的参数)和“重载”(即可选参数)。

    关键字参数(使用单个对象参数模拟)也很常见,例如$.ajax({settings})

    所以是的,这一切都是在这个地方完成的,但是你称之为“超载”是一个类别混淆。 JS既不是静态类型的,也不具有固定数量的函数参数。 在通话时,无论函数声明什么,您都可以提供尽可能多的参数或尽可能少的参数。 您应该将函数声明中的参数列表视为arguments魔术变量的数组解构的简写,而不是固定的函数签名。

    对速度的影响非常小,甚至不成为考虑因素。

    至于什么时候这样做,什么时候使用单独的功能,这完全是一个程序清晰度和可用性问题,可能会受到广泛的意见。

    链接地址: http://www.djcxy.com/p/51967.html

    上一篇: Do You Use "Fake" Function Overloading In JavaScript?

    下一篇: returning all results even if no match and make delay to ajax