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数字格式化通用类 accounting.js使用
Aug 24 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
改变隐藏的input中value的值代码
Dec 30 Javascript
table insertRow、deleteRow定义和用法总结
May 14 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
May 03 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 Javascript
表单元素值获取方式js及java方式的简单实例
Oct 15 Javascript
js实现添加删除表格(两种方法)
Apr 27 Javascript
JS判断时间段的实现代码
Jun 14 Javascript
js实现跟随鼠标移动的小球
Aug 26 Javascript
浅谈vue权限管理实现及流程
Apr 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 获取MSN好友列表的代码(2009-05-14测试通过)
2009/09/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
JavaScript对Cookie进行读写操作实例
2015/07/25 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
2018/12/28 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python实现一个论文下载器的过程
2021/01/18 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
辞职书格式样本
2015/02/26 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书