JS重载实现方法分析


Posted in Javascript onDecember 16, 2016

本文实例分析了JS重载实现方法。分享给大家供大家参考,具体如下:

重载是面向对象语言里很重要的一个特性,JS中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,不是纯面向对象的,它没有真正的多态:如继承、重载、重写)

一、什么时候用重载?

举例:

function getDataTop10(){
  alert("返回前10条数据");
}

后来需求改了,需要获得20条数据,而getDataTop10又被很多函数调用了,整体替换可以但麻烦,这时可以用重载

进而引出什么是重载:函数名相同,但是可以区分出来,想用哪个就用哪个,而不是后面的同名函数覆盖前面的

二、怎么用?

arguments:Js里的一个内置对象,包含了调用者传递的实际参数(函数声明时定义的参数个数不影响)

function getData(){
  alert("返回所有数据");
}
function getDataTop(num){
  alert("返回前"+num+"数据");
}
function getDataLimit(num1,num2){
  alert("返回前"+num1+"-"+num2+"数据");
}
function getDste(){
  var num=arguments.length;
  if(!num){
  getData();
  }
  else if(num==1){
  getDataTop(arguments[0]);
  }
  else if(num==2){
  getDataLimit(arguments[0],arguments[1]);
  }
}
getDste(5)

当参数很多时要写一大串,遂可以改进

function getData(){
  alert("返回所有数据");
}
function getDataTop(num){
  alert("返回前"+num+"数据");
}
function getDataLimit(num1,num2){
  alert("返回前"+num1+"-"+num2+"数据");
}
function getDste(){
  var num=arguments.length;
  if(!num){
    getData();
  }
  else if(num==1){
    getDataTop.apply(this,arguments);
  }
  else if(num==2){
    getDataLimit.apply(this,arguments);
  }
}
getDste(5)

如果参数个数相同,类型不同,又该如何

function getData(){
  alert("返回所有数据");
}
function getDataTop(num){
  alert("返回前"+num+"数据");
}
function getDataLimit(num1,num2){
  alert("返回前"+num1+"-"+num2+"数据");
}
function getDataByType(type){
  alert("将返回"+type+"类型的数据");
}
function getDste(){
  var num=arguments.length;
  if(!num){
  getData();
  }
  else if(num==1){
  if(typeof arguments[0]=="number"){
      getDataTop.apply(this,arguments);
  }
  else{
    getDataByType.apply(this,arguments);
  }
  }
  else if(num==2){
  getDataLimit.apply(this,arguments);
  }
}
getDste("array")

三、好处

有利于合作开发

四、坏处

“实现”太勉强,如果参数过多,就要很多if语句,显得代码很乱

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
JavaScript 事件的一些重要说明
Oct 25 Javascript
js创建子窗口并且回传值示例代码
Jul 02 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
Feb 28 Javascript
js实现select跳转功能代码
Oct 22 Javascript
将页面table内容与样式另存成excel文件的方法
Aug 05 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
JavaScript中的this使用详解
Jul 27 Javascript
详解基于vue的移动web app页面缓存解决方案
Aug 03 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
vue-cli 3.x配置跨域代理的实现方法
Apr 12 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
概述一个页面从输入URL到页面加载完的过程
Dec 16 #Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
Dec 16 #Javascript
js继承实现方法详解
Dec 16 #Javascript
详解jQuery简单的表格应用
Dec 16 #Javascript
JS中parseInt()和map()用法分析
Dec 16 #Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
Dec 16 #Javascript
JS数字千分位格式化实现方法总结
Dec 16 #Javascript
You might like
一个php作的文本留言本的例子(三)
2006/10/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
简单实现PHP留言板功能
2016/12/21 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
原生JS实现拖拽效果
2020/12/04 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
京东国际站:JOYBUY
2017/11/23 全球购物
11月升旗仪式讲话稿
2014/02/15 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
80后婚前协议书范本
2014/10/24 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
安全主题班会教案
2015/08/12 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js
Python数据处理的三个实用技巧分享
2022/04/01 Python