首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你在JavaScript中使用“伪”函数重载了吗?

你在JavaScript中使用“伪”函数重载了吗?
EN

Stack Overflow用户
提问于 2013-03-30 23:17:33
回答 3查看 847关注 0票数 4

在C#中,我可能有一个重载的函数,如下所示:

代码语言:javascript
运行
复制
public string OverLoad(string str1)                  {return str1;}
public string OverLoad(string str1, string str2)     {return str1+str2;}

我知道JavaScript没有对重载函数的内置支持,但是有没有人解决这个问题来实现重载函数的功能呢?

我很好奇:

1.)对速度的影响

2.)使用不同函数名与重载的原因

似乎您可以检查参数是否未定义,并在JavaScript中“伪造”该功能。对我来说,只需更改参数的数量就可以轻松地更改函数,这将是一个相当大的优势。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-30 23:23:47

在javascript中,有一种趋势是传递参数是对象的属性,即只有一个参数是对象,因此你可以以任何顺序指定任何东西。使用这种方法,你可以检查“未定义的”,并且你的函数可以按照。

如果你在不同的情况下有相当大的行为,你可以通过将每个情况分成一个单独的函数来扩展这个想法,然后这个函数被你的主‘重载’函数调用。

例如:

代码语言: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);
    }
}

您也可以使用基于number参数或number of arguements的相同方法。您可以阅读有关使用参数here的内容。

票数 4
EN

Stack Overflow用户

发布于 2013-03-30 23:23:06

JavaScript 不支持函数重载。尽管它允许您传递数量可变的参数。

您必须检查function内部传递了多少arguments,以及它们的类型。

票数 2
EN

Stack Overflow用户

发布于 2013-03-30 23:40:05

这是如此普遍,甚至没有被注意到。

例如,在JQuery中,on()方法有多个调用签名:

代码语言:javascript
运行
复制
.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 magic variable数组解构的速记形式,而不是固定的函数签名。

对速度的影响微乎其微,甚至不需要考虑。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15720074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档