【问题标题】:Is there a way to have 2 functions with the same name?有没有办法让两个函数同名?
【发布时间】:2020-01-11 01:37:29
【问题描述】:

我正在尝试实现类似的效果,其中我有 2 个同名的函数,但它们接受不同数量的参数。我知道在 javascript 中重载是不可能的,并且最后定义的函数将是每次调用的函数,但是我想知道是否有办法这样做。我知道我可以用不同的方式命名它们,检查参数的数量,有默认参数等,但我试图避免所有这些。

【问题讨论】:

  • 但我试图避免所有这些。没有其他选择,这就是 drawImage 正在做的事情(除了在本机代码中,而不是在 JS 中)
  • 功能相同,但带有浏览器的智能感知
  • 我知道在javascript中重载是不可能的,最后定义的函数将是每次调用的函数,但是我想知道是否有办法这样做 - 这就像说我知道汽车不会飞,但我想知道是否有办法让我的汽车飞起来
  • 只需使用它需要的最大参数数创建一个函数......然后,函数中的代码可以确定传递了多少个参数并根据参数的数量做任何事情 - 注意:调用具有比声明更多或更少参数的 javascript 函数不会导致错误
  • 就像检查arguments.length一样简单

标签: javascript function overloading


【解决方案1】:

您作为示例使用的drawImage 函数不仅适用于纯javascript。顶部显示**image**, x... 和底部显示**image**, sx... 的自动完成功能需要打字稿或打字稿定义。如果你不关心编辑器的东西,那么有一种方法可以在 javascript 中做到这一点。

Javascript 示例

你需要 something 来区分这两种不同的功能。例如,这两个函数不能具有完全相同的争论类型。

假设你想要一个函数来做两件事。如果给出string,它会将" - Yes" 添加到字符串中。如果给定 number,则将其乘以 2。

function multiUse(arg1){
    if(typeof(arg1) == "string"){
        //Do some stuff
        return arg1 + " - Yes";
    }
    else{
        //Do other stuff
        return arg1 * 2;
    }
}

这里我们有一个函数,它通过调用同一个函数来做两件不同的事情。

使用 Typescript 的示例

如果你想有一个合适的打字稿重载函数,那么你会这样做

function multiUse(string: string): string;
function multiUse(number: number): number;
function multiUse(arg1: any): any {
    if(typeof(arg1) == "string"){
        //Do some stuff
        return arg1 + " - Yes";
    }
    else{
        //Do other stuff
        return arg1 * 2;
    }
};

在此之后,您必须将 typescript 文件转换为 javascript 文件。这两种方式基本相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多