原生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标签. 缺点: 需要满足特定的数据结构 废话不多说,展示代码. ...
随机推荐
- 【Json】1、JSON 数据格式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅读和编写,同时也易 ...
- Java构造器的调用顺序
<Java编程思想>中对构造器的调用顺序有如下描述: “构造器实际上是static方法,只不过该static声明是隐式的.” “基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次 ...
- win10系统彻底卸载Mysql
本文介绍,在Windows10系统下,如何彻底删除卸载MySQL... 1>停止MySQL服务 开始->所有应用->Windows管理工具->服务,将MySQL服务停止. 2& ...
- JS闭包和引用
简介 Javascript 中一个最重要的特性就是闭包的使用.因为闭包的使用,当前作用域总可以访问外部的作用域.因为Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关 ...
- VUE axios 发送 Form Data 格式数据请求
axios 默认是 Payload 格式数据请求,但有时候后端接收参数要求必须是 Form Data 格式的,所以我们就得进行转换.Payload 和 Form Data 的主要设置是根据请求头的 C ...
- Sharepoint 2013 Gatherer 数据库的架构版本低于此 Gatherer 应用程序支持的向后兼容的最低架构版本
管理中心 ->升级和迁移 ->查看数据库状态 解决方法: 开始-运行(以管理员身份运行),输入如下命令. cd C:\Program Files\Common Files\Microso ...
- python自动化开发-3
python里的集合 1.集合的概念 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型.set集合,是一个无序且不重复的元素集合. 2.集合的主要作用 1)去重 举例说明: ...
- 《Inside C#》笔记(十三) 多线程 下
一 任务调度 当一个线程的时间片被用尽后,处理器会切换到另一个线程,但关于如何确定执行哪一个线程呢,这就涉及到了线程或任务的优先级. a) 每个线程都有优先级,任务调度算法会根据各线程的不同优先级来决 ...
- ubuntu18.04突然无法上网解决方法
sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...
- python TCP socket套接字编程以及注意事项
TCPServer.py #coding:utf-8 import socket #s 等待链接 #c 实时通讯 s = socket.socket(socket.AF_INET,socket.SOC ...