JS重载实现方法分析

作者:鬼畜十三 时间:2023-10-07 08:09:04 

本文实例分析了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程序设计有所帮助。

标签:JS,重载
0
投稿

猜你喜欢

  • DIV与Table布局在大型网站的可用性比较

    2007-10-08 12:46:00
  • 利用Python计算质数与完全数的方法实例

    2022-12-30 23:35:26
  • pytorch 自定义卷积核进行卷积操作方式

    2021-07-24 22:54:39
  • 如何利用Python动态模拟太阳系运转

    2022-01-14 15:01:43
  • Python正则抓取新闻标题和链接的方法示例

    2022-05-16 06:01:31
  • 解决使用pycharm提交代码时冲突之后文件丢失找回的方法

    2023-11-21 07:25:32
  • 浅谈SQL Server 对于内存的管理[图文]

    2024-01-14 07:41:44
  • Django框架实现在线考试系统的示例代码

    2021-05-24 23:07:00
  • 详解vue中的computed的this指向问题

    2024-04-27 15:46:56
  • JS获取当前时间的实例代码(昨天、今天、明天)

    2024-04-23 09:28:36
  • SQL Server 2012使用Offset/Fetch Next实现分页数据查询

    2024-01-25 03:54:55
  • 解决python Markdown模块乱码的问题

    2021-09-15 07:31:36
  • ASP使用fso遍历文件及文件夹列出文件名

    2008-10-27 19:32:00
  • python实现画循环圆

    2023-01-17 02:18:28
  • python计算圆周长、面积、球体体积并画出圆

    2022-08-15 06:19:59
  • 浅析SQL Server 2008企业级新特性

    2008-11-24 17:01:00
  • JavaScript对象的浅拷贝与深拷贝实例分析

    2024-04-16 09:46:34
  • Mysql命令大全(完整版)

    2024-01-13 15:03:35
  • mysql 事务处理及表锁定深入简析

    2024-01-23 06:34:52
  • 奇淫技巧和西天取经

    2009-08-24 12:34:00
  • asp之家 网络编程 m.aspxhome.com