原生js函数的伪重载
一、我们在学习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函数的伪重载的更多相关文章
- js函数的伪重载
这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...
- 常用原生JS函数和语法集合
luoyishan-2017-10-08 1. 输出语句:document.write(""); 2. JS中的注释为// 3. 传统的HTML文档顺序是:document-> ...
- 原生js 函数 callee属性
一.在es5中,函数中有arguments参数,该参数是一个包含函数传入的参数的类数组. <script> function myArrgu(x){ console.log(argumen ...
- 原生JS研究:学习jquery源码,收集整理常用JS函数
原生JS研究:学习jquery源码,收集整理常用JS函数: 1. JS获取原生class(getElementsByClass) 转自:http://blog.csdn.net/kongjiea/ar ...
- 如何编写高质量的 JS 函数(4) --函数式编程[实战篇]
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/ZoXYbjuezOWgNyJKmSQmTw作者:杨昆 [编写高质量函数系列],往期精彩内容: ...
- __call PHP伪重载方法
为了避免当调用的方法不存在时产生错误,可以使用 __call() 方法来避免.该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去 该方法有两个参数,第一个参数 $function_name 会 ...
- 原生JS实现call,apply,bind函数
1. 前言 使用原生JS实现call和apply函数,充分了解其内部原理.call和apply都是为了解决改变this的指向.作用都相同,只是传参的方式不同.除了第一个参数外,call可以接受一个参数 ...
- 原生js判断css动画结束 css 动画结束的回调函数
原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...
- 原生JS封装创建多级菜单函数
手写一个使用原生JS封装的多级菜单的函数,满足以下几点需求. 子类层级不确定,可根据数据自动生成多级菜单. 操作便捷,只需传入一个HTML标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...
随机推荐
- 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 ...
- ajax小知识
1.ajax发送get请求时,需要注意如下情况: var uri="http://127.0.0.1:8071/springmvcdemo/bigdataapi/publishdata&qu ...
- 安卓开发_关于WebView使用链接时调用浏览器显示的问题
在我们的实际开发中,我们用到WebView就是为了在自己的APP中的某个部分来显示指定网页的效果. 但是在学习的过程中,我发现一个问题: 有的网页使用WebView控件显示出来以后,再点击网页中的某个 ...
- 使用apksigner对apk进行v2签名
最近进行三方安全测试,剩最后一个问题: 原因是我用360加固宝之后,又用了360Signer对apk进行二次签名,而360Signer是用v1方式对apk进行签名的,所以安全检测还是不通过. 下面给出 ...
- Node 编码规范(优秀是一种习惯)
编码规范 空格与格式 1. 缩进 采用2个空格缩进,而不是tab缩进. 空格在编辑器中与字符是等宽的,而tab可能因编辑器的设置不同.2个空格会让代码看起来更紧凑.明快. 2. 变量声明 永远用var ...
- recovery 强制执行恢复出厂设置(Rescue Party)
有时候我们在系统正常运行的时候,突然跑到recovery里面了,并且停在了如下界面: Can't load Android system. Your data may be corrupt. If ...
- DevOps自动化工具集合
版本控制&协作开发:GitHub.GitLab.BitBucket.SubVersion.Coding.Bazaar 自动化构建和测试:Apache Ant.Maven .Selenium.P ...
- 洗礼灵魂,修炼python(12)--python关键词,包
关键词 1.什么是关键词: 就是系统已经定义好的一些关键词语法,可以直接使用,很明显的就是在IDE里这些关键词会高亮显示的就是 2.有哪些关键词: 前面我们一直在说关键词,内置函数,到底有哪些关键词对 ...
- django母版页的使用
母版页用于处理html页面相同部分内容,避免在不同的页面中重复出现 1.添加母版页 再manage.py文件相同目录下添加templates文件夹用于保存母版页html文件 2.添加母版页Base.h ...
- Mac上用spotlight搜索输入几个字母后闪退
最近使用电脑时遇到的问题: 使用spotlight进行搜索时,只要输入字母超过一定个数(在我的Mac上是3个),spotlight就闪退了. 谷歌搜索得到大部分解决方案是在系统自带词典的偏好设置里取消 ...