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 相关文章推荐
Javascript 读后台cookie代码
Sep 15 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
Jan 09 Javascript
jQuery插件expander实现图片翻转特效
May 21 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
ES6 class的应用实例分析
Jun 27 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下拉选项的批量操作的实现代码
2013/10/14 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
php实现中文转数字
2016/02/18 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
js 学习笔记(三)
2009/12/29 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
简单掌握JavaScript中const声明常量与变量的用法
2016/05/21 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
python如何基于redis实现ip代理池
2020/01/17 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
python基于爬虫+django,打造个性化API接口
2021/01/21 Python
html5指南-7.geolocation结合google maps开发一个小的应用
2013/01/07 HTML / CSS
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
存储过程的优点有哪些
2012/09/27 面试题
办公室文秘岗位职责
2013/11/15 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
国情备忘录观后感
2015/06/04 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
css3 选择器
2022/05/11 HTML / CSS