如何在JavaScript中使用多个名称定义同一个函数

3
我有一个需求,需要在我的应用程序的某些屏幕上执行js代码,并且我需要以视图ID命名函数,例如myScreen1().. myScreen3()。
但由于所有函数名称的函数定义相同,是否有一种声明方式可以使所有函数名称都引用相同的定义?

2
为什么不直接重复使用同一个函数呢?函数名称应该与其目的相关,而不是与调用它们的上下文相关。 - Rory McCrossan
为什么不递归调用一个函数? - thecodeparadox
可能是重复的问题:Javascript - 变量在函数名中,是否可行? - Joren
我可以重复使用同一个函数,但是我有超过10个屏幕,而且代码会重复。在我的应用程序中调用这些屏幕的相同函数有点复杂,为了将来的维护,如果我想要为更多的屏幕调用它,我可以通过对我的js进行简单的更改来直接调用它。有没有办法定义多个名称的相同定义而不重复代码? - dush
1
为什么不将屏幕ID移入参数,而不是函数名称。myScreen1() 将变成 myScreen(screenId) { //在此处执行常见操作 //以下是特定于视图的内容 if (screenId == 1) {在此处添加第1个屏幕特定的内容等} } - Rainer Plumer
4个回答

9
以下代码是可行的,但您可能需要重新考虑您的设计,因为很可能只使用一个函数名也可以实现相同的功能。
var func = function() {
    // definition goes here
}
var myScreen1 = func;
var myScreen2 = func;

3

压缩一下@Peter Van der Wal的代码:

var myScreen1, myScreen2, myScreen3;
myScreen1 = myScreen2 = myScreen3 = function() {
    // definition goes here
};

但如果真的需要…

对于所有函数名称,函数定义都是相同的。

那么你为什么不使用 myScreen() 而不是 myScreen1(), myScreen2() 或者 myScreen3() 呢?

我很好奇:如果它们都做同样的事情,你如何决定调用哪一个?


有没有任何ES6的方法可以实现相同的功能? - TechTurtle

2
将它们包装在另一个函数中。
function handleScreen( screenName ) {
    // do stuff in common with all screens here
    // and call specific functions for specific screens
   if (typeof window[screenName] == "function") {window[screenName]();}
}
function screen1() {
   //do stuff for screen 1
}
function screen2() {
   //do stuff for screen 2
}

handleScreen("screen2");

0
以下代码应该可以运行,但是最好像结尾处所示一样进行分隔。
function handleScreen( viewID ) {
    if(viewID == 1){
        // Do Stuff For Screen 1
    } else if(viewID == 2){
        // Do Stuff For Screen 2
    }
}
handleScreen(2);

通过这种方式,您只需要定义一个函数,如果需要,您可以使用以下所示的某些函数进行分隔。
function handleScreen( viewID ) {
    if(viewID == 1){
        displayLoadSign();
        loadList();
        hideLoadSign();
    } else if(viewID == 2){
        showConnectionError();
        displayLoadSign();
    }
}
handleScreen(2);

这样你就不必多次编写代码了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接