JS重载实现方法分析
程序员文章站
2023-11-06 10:56:40
本文实例分析了js重载实现方法。分享给大家供大家参考,具体如下:
重载是面向对象语言里很重要的一个特性,js中没有真正的重载,是模拟出来的(因为js是基于对象的编程语言,...
本文实例分析了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程序设计有所帮助。
上一篇: 如此利好,带你玩转地球币