博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现js中的重载
阅读量:7103 次
发布时间:2019-06-28

本文共 1715 字,大约阅读时间需要 5 分钟。

重载是面向对象语言里很重要的一个特性,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语句,显得代码很乱

转载于:https://www.cnblogs.com/zhangwenkan/p/3954050.html

你可能感兴趣的文章
java毕业设计自学入门教程
查看>>
为什么传统的婚姻和家庭会消解?
查看>>
Linode使用记录
查看>>
使用jconsole和jvisualvm检测jvm性能
查看>>
JAVA语言泛型编程实现单例模式
查看>>
magento中csv文件表格制作容易出现的问题
查看>>
python文件读取并使用mysql批量插入
查看>>
python
查看>>
HTTPS SSL免费证书生成
查看>>
Linux下卸载和安装MySQL[rpm包]
查看>>
Xcode 自带git 使用,忽略用户数据
查看>>
title: Spring Security源码分析七:Spring Security 记住我
查看>>
【原创】图解 hotwheels
查看>>
Git提交与更新
查看>>
自定义类实现基于数组/字典Literal Syntax设置和获取数据
查看>>
iOS开发22:SandBox的结构
查看>>
java之反射构造方法
查看>>
Android studio鼠标提示功能
查看>>
PHP 浮点型运算相关问题
查看>>
laraval 安装
查看>>