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 相关文章推荐
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
Jquery 获取checkbox的checked问题
Nov 16 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
JavaScript 数组- Array的方法总结(推荐)
Jul 21 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 Javascript
jqgrid实现简单的单行编辑功能
Sep 30 Javascript
vue将对象新增的属性添加到检测序列的方法
Feb 24 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
引入外部js脚本加载慢与页面白屏问题的解决
Dec 10 Javascript
关于layui 下拉列表的change事件详解
Sep 20 Javascript
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
概述一个页面从输入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
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
php判断目录存在的简单方法
2019/09/26 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript hashtable实现代码
2009/10/13 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
微信小程序 在线支付功能的实现
2017/03/14 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
2019/05/29 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
Python实现PyPDF2处理PDF文件的方法示例
2019/09/25 Python
python使用Geany编辑器配置方法
2020/02/21 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
C语言编程题
2015/03/09 面试题
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
Ejb技术面试题
2015/04/29 面试题
上班早退检讨书
2014/01/09 职场文书
促销活动计划书
2014/05/02 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
家长通知书家长意见
2015/06/03 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS