一、我们在学习java的时候,其中方法有一个比较的重要的特性重载,根据传入的参数的个数来执行不同的方法,而方法其根据签名来判断,而JavaScript却不能根据方法的签名来进行重载,只能通过参数的个数的来进行实现伪重载。

在函数体中有个对象arguments,记录调用函数的传入的参数的对象:

 <!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function reloadFunc(ar1,ar2,ar3){
console.log(arguments);
console.log(typeof arguments);
};
reloadFunc('a','b')
</script>
</body>
</html>

输出:

 Arguments() ["a", "b", callee: ƒ, Symbol(Symbol.iterator): ƒ]: "a": "b"callee: ƒ reloadFunc(ar1,ar2,ar3)length: 2Symbol(Symbol.iterator): ƒ values()__proto__: Object

我们可以在定义函数函数的不显示的显示参数,通过传入arguments的长度来判断参数。

     function reloadFunc(){
switch(arguments.length){
case :
console.log("一个参数!");
break;
case :
console.log("两个参数!");
break;
case :
console.log('三个参数!');
break;
default:
console.log('未传入参数!')
}
};
reloadFunc('a','b');
reloadFunc();
reloadFunc(,,)

等同于:

 <script type="text/javascript">
function reloadFunc(ar1,ar2,ar3){
switch(arguments.length){
case :
console.log("一个参数!");
break;
case :
console.log("两个参数!");
break;
case :
console.log('三个参数!');
break;
default:
console.log('未传入参数!')
}
};
reloadFunc('a','b');
reloadFunc();
reloadFunc(,,)
</script>

注意:1、当我们显示定义了参数之后,如果传入的参数个数小于我们显示定义参数,默认缺省参数为undefined的。

   2、arguments的对象和函数的参数是不同的内存空间,我们可以通过arguments修改参数。

   3、通过arguments修改参数的时候,可以反射对应的变量,但是arguments的长度在调用该函数的时候,就已经决定了。如果我们修改arguments的不存在的索引的变量值并不能反射到对应变量,依然是undefined的:

 <!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
function reloadFunc(ar1,ar2,ar3){
arguments[]=;
console.log(ar3);
};
reloadFunc('a','b');
</script>
</body>
</html>

输出:

 undefined

我们可以通过下标访问arguments对象:

 <script type="text/javascript">
function reloadFunc(ar1,ar2,ar3){
console.log(arguments);
console.log(typeof arguments);
console.log(arguments[],arguments[])
};
reloadFunc('a','b')
</script>

我们可以通过判断该对象的长度来进行方法的重载。

 <script type="text/javascript">
function reloadFunc(ar1,ar2,ar3){
switch(arguments.length){
case :
console.log("一个参数!");
break;
case :
console.log("两个参数!");
break;
case :
console.log('三个参数!');
break;
default:
console.log('未传入参数!')
}
};
reloadFunc('a','b');
reloadFunc();
reloadFunc(,,)
</script>

输出:

 两个参数!
函数重载.html: 未传入参数!
函数重载.html: 三个参数!

我们可以判断传入的参数的长度来决定一个执行的不同的代码块。实现类似的java的伪重载。

原生js函数的伪重载的更多相关文章

  1. js函数的伪重载

    这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...

  2. 常用原生JS函数和语法集合

    luoyishan-2017-10-08 1. 输出语句:document.write(""); 2. JS中的注释为// 3. 传统的HTML文档顺序是:document-> ...

  3. 原生js 函数 callee属性

    一.在es5中,函数中有arguments参数,该参数是一个包含函数传入的参数的类数组. <script> function myArrgu(x){ console.log(argumen ...

  4. 原生JS研究:学习jquery源码,收集整理常用JS函数

    原生JS研究:学习jquery源码,收集整理常用JS函数: 1. JS获取原生class(getElementsByClass) 转自:http://blog.csdn.net/kongjiea/ar ...

  5. 如何编写高质量的 JS 函数(4) --函数式编程[实战篇]

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/ZoXYbjuezOWgNyJKmSQmTw作者:杨昆 [编写高质量函数系列],往期精彩内容: ...

  6. __call PHP伪重载方法

    为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会 ...

  7. 原生JS实现call,apply,bind函数

    1. 前言 使用原生JS实现call和apply函数,充分了解其内部原理.call和apply都是为了解决改变this的指向.作用都相同,只是传参的方式不同.除了第一个参数外,call可以接受一个参数 ...

  8. 原生js判断css动画结束 css 动画结束的回调函数

    原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...

  9. 原生JS封装创建多级菜单函数

    手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...

随机推荐

  1. When should you use a class vs a struct in C++?

    Question: In what scenarios is it better to use a struct vs a class in C++? Answer: The only differe ...

  2. ajax小知识

    1.ajax发送get请求时,需要注意如下情况: var uri="http://127.0.0.1:8071/springmvcdemo/bigdataapi/publishdata&qu ...

  3. 安卓开发_关于WebView使用链接时调用浏览器显示的问题

    在我们的实际开发中,我们用到WebView就是为了在自己的APP中的某个部分来显示指定网页的效果. 但是在学习的过程中,我发现一个问题: 有的网页使用WebView控件显示出来以后,再点击网页中的某个 ...

  4. 使用apksigner对apk进行v2签名

    最近进行三方安全测试,剩最后一个问题: 原因是我用360加固宝之后,又用了360Signer对apk进行二次签名,而360Signer是用v1方式对apk进行签名的,所以安全检测还是不通过. 下面给出 ...

  5. Node 编码规范(优秀是一种习惯)

    编码规范 空格与格式 1. 缩进 采用2个空格缩进,而不是tab缩进. 空格在编辑器中与字符是等宽的,而tab可能因编辑器的设置不同.2个空格会让代码看起来更紧凑.明快. 2. 变量声明 永远用var ...

  6. recovery 强制执行恢复出厂设置(Rescue Party)

    有时候我们在系统正常运行的时候,突然跑到recovery里面了,并且停在了如下界面:   Can't load Android system. Your data may be corrupt. If ...

  7. DevOps自动化工具集合

    版本控制&协作开发:GitHub.GitLab.BitBucket.SubVersion.Coding.Bazaar 自动化构建和测试:Apache Ant.Maven .Selenium.P ...

  8. 洗礼灵魂,修炼python(12)--python关键词,包

    关键词 1.什么是关键词: 就是系统已经定义好的一些关键词语法,可以直接使用,很明显的就是在IDE里这些关键词会高亮显示的就是 2.有哪些关键词: 前面我们一直在说关键词,内置函数,到底有哪些关键词对 ...

  9. django母版页的使用

    母版页用于处理html页面相同部分内容,避免在不同的页面中重复出现 1.添加母版页 再manage.py文件相同目录下添加templates文件夹用于保存母版页html文件 2.添加母版页Base.h ...

  10. Mac上用spotlight搜索输入几个字母后闪退

    最近使用电脑时遇到的问题: 使用spotlight进行搜索时,只要输入字母超过一定个数(在我的Mac上是3个),spotlight就闪退了. 谷歌搜索得到大部分解决方案是在系统自带词典的偏好设置里取消 ...