极乐门资源网 Design By www.ioogu.com

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

标签:
JS,重载

极乐门资源网 Design By www.ioogu.com
极乐门资源网 免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com

评论“JS重载实现方法分析”

暂无JS重载实现方法分析的评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?