JS函数重载解决方案

 JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

  办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

1.根据参数个数重载

js判断传入参数数量可以用arguments.length这个属性来判断;

1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript">
function add() {
    if (arguments.length == 1) {
        alert(arguments[0] + 10);
    }
    else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
//函数调用
add(10);
add(10, 20);
</script>

2.根据参数类型重载

判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

typeofstringnumberobjectfunctionbooleanobjectobject
constructorStringNumberObjectFunctionBooleanArrayUser Define
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type="text/javascript">
function add()
{
    if (arguments.length == 0) return 0;
    var sum=0;
    for(var i=0; i<arguments.length; i++){
        if(arguments[i].constructor == Number){
        //或者改为:if(arguments[i] instanceof Number)
        //或者改为:if(typeof(arguments[i])=="number")
        sum += arguments[i];
      }
    }
    return sum;
}
//函数调用
alert(add(10));
alert(add(10,20));
</script>

转载于:https://www.cnblogs.com/xiaochao12345/p/4137513.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS中replace替换全部元素的解决办法

JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 然而我们大多数需要替换的是全部匹配的元素&#xff0c;而JavaScript又没有java中的replaceAll的方法&#xff0c;这个时候就需要特殊处理了。 String repace(new R…

160 - 22 CarLitoZ.1

环境 Windows xp sp3 工具 exeinfope Ollydbg 查壳 无壳的VB程序 测试 输入“1234567” 显示这个&#xff1a; 直接OD载入字符串搜索。 00402D20 > \55 push ebp 00402D21 . 8BEC mov ebp,esp 00402D23 . 83EC 0C sub e…

实战MEF(4):搜索范围

在前面的文章中&#xff0c;几乎每个示例我们都会接触到扩展类的搜索位置&#xff0c;我们也不妨想一下&#xff0c;既然是自动扩展&#xff0c;它肯定会有一个或者多人可供查找的位置&#xff0c;不然MEF框架怎么知道哪里有扩展组件呢&#xff1f; 就像我们用导航系统去查找某…

Android应用程序请求SurfaceFlinger服务创建Surface的过程分析

文章转载至CSDN社区罗升阳的安卓之旅&#xff0c;原文地址&#xff1a;http://blog.csdn.net/luoshengyang/article/details/7884628 前面我们已经学习过Android应用程序与SurfaceFlinger服务的连接过程了。连接上SurfaceFlinger服务之后&#xff0c;Android应用程序就可以请求…

Oracle面试题(基础篇)

1. Oracle跟SQL Server 2005的区别&#xff1f; 宏观上&#xff1a; 1). 最大的区别在于平台&#xff0c;oracle可以运行在不同的平台上&#xff0c;sql server只能运行在windows平台上&#xff0c;由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracl…

160 - 23 Chafe.1

环境 Windows xp sp3 工具 exeinfope ollydbg 查壳 用exeinfoe查壳 测试 可以从左下角状态栏看出serial是无效的 直接OD载入字符串搜索 00401274 |. /75 17 jnz XChafe_1.0040128D 00401276 |. |6A 00 push 0x0 ; /Ti…

fis 详细介绍(mac版) - 12-26没有弄完 - 暂停

fis可以让fe进入角色&#xff0c;而不必担心底层的架构&#xff0c;性能得到优化。仅需三条命令&#xff0c;即可解决所有前端开发要求fis是nodejs写的&#xff0c;发布在vpn(&#xff1f;)上下载 www.nodejs.org&#xff0c;并安装nodejs&#xff0c;其中包括npm安装fis: sudo…

用文件模拟CMOS保存数据

Hi3520D 芯片的内置CMOS最多只有5个字节可以用&#xff0c;但是我需要保存的数据有很多。 其中一个解决办法是&#xff1a;可以把其他需要保存的数据放到一个配置文件中。每次写的时候写到配置文件&#xff0c;用的时候再从配置文件读出数据即可。 用文件写&#xff1a; 1 stat…

160 - 24 Chafe.2

环境&#xff1a; Windows xp sp3 工具 exeinfope OllyDBG 查壳 用exeinfope查壳&#xff0c;发现是没有壳的。 测试 可以看出是从红色框框里面的内容判断serial是否有效 OD载入&#xff0c;字符串搜索可以得到&#xff1a; 004011EC . 55 pus…

十个利用矩阵乘法解决的经典题目

转载自 Matrix67: The Aha Moments 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人&#xff0c;今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识&#xff0c;只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色…

[C++]搞清楚类中构造与析构的顺序

定义一个类对象时&#xff0c;首先根据初始化列表初始化类的成员&#xff08;就算没有显式定义初始化列表&#xff0c;编译器也会默认地初始化一次&#xff09;&#xff0c;然后运行构造函数。因此&#xff0c;类成员的构造函数必定先于类的构造函数运行。 class A { public:A(…

160 - 25 CodeZero.1

环境 Windows xp sp3 工具 exeinfope OllyDBG 查壳 无壳的VB程序 测试 运行程序后出现Nag窗口&#xff0c;所以这次的目标是除Nag窗口和找到serial 程序运行后弹出Nag窗口&#xff0c;并且等待5秒后按钮的标题改成“Continue..”&#xff0c;点击后才会弹出输入seria…

WP8开发学习笔记动态修改启动时导航的第一个页面(如登录前启动页为LoginPage,登录后变为MainPage)...

很多时候我们需要在启动程序的时候根据状态改变初始导航页面&#xff0c;比如程序在启动的时候判断用户是否登录&#xff0c; 如果未登录则跳转到LoginPage.xaml否则跳转到MainPage界面。 这时候就要分析程序的启动和导航的过程。 程序的启动是App.xamlcs负责的。 App类的构造器…

6.数组和Hash表

当显示多条结果时&#xff0c;存储在变量中非常智能&#xff0c;变量类型会自动转换为一个数组。 在下面的例子中&#xff0c;使用GetType()可以看到$a变量已经不是我们常见的string或int类型&#xff0c;而是Object类型&#xff0c;使用-is操作符来判断是否是个数组&#xff0…

160 - 26 Colormaster

环境 Windows xp sp3 查壳 无壳的VB程序 测试&#xff1a; 输入 Name:123456 Serial:12345 字符串搜索&#xff0c;找到判断位置。 判断Name的长度要大于等于5&#xff1a; 00402CBC . 33C9 xor ecx,ecx 00402CBE . 83F8 04 cmp eax,0x4 00…

Android 菜单(OptionMenu)大全 建立你自己的菜单

菜单是用户界面中最常见的元素之一&#xff0c;使用非常频繁&#xff0c;在Android中&#xff0c;菜单被分为如下三种&#xff0c;选项菜单&#xff08;OptionsMenu&#xff09;、上下文菜单&#xff08;ContextMenu&#xff09;和子菜单&#xff08;SubMenu&#xff09;&#…

160 - 27 Cosh.1

环境 Windows XP sp3 工具 exeinfope ollydbg 查壳 无壳的MFC程序 测试 弹出这个&#xff1a; 是一个CD-CHECK保护的程序。 字符串搜索&#xff0c;一下子就能来到这里&#xff1a; 0040121A . 68 9C304000 push Cosh_1.0040309C …

什么时候加上android.intent.category.DEFAULT

1、要弄清楚这个问题&#xff0c;首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。 Explicit Intent明确的指定了要启动的Acitivity &#xff0c;比如以下Java代码&#xff1a; Intent intent new Intent(this, B.class) Implicit Intent没有明确的指…

[BZOJ 2165] 大楼 【DP + 倍增 + 二进制】

题目链接&#xff1a;BZOJ - 2165 题目分析&#xff1a; 这道题我读了题之后就想不出来怎么做&#xff0c;题解也找不到&#xff0c;于是就请教了黄学长&#xff0c;黄学长立刻秒掉了这道题&#xff0c;然后我再看他的题解才写出来。。Orz 使用 DP 倍增 &#xff0c;用状态 f[…

oracle创建表空间

注意点&#xff1a; 1.如果在PL/SQL 等工具里打开的话&#xff0c;直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在&#xff0c;比如【D:\oracle\oradata\Oracle9i\】也就是你要保存文件的路径存在 /*分为四步 */ /*第1步&#xff1a;创建临时表空间 */ create tempor…