js面向对象编程:怎样实现方法重载
js中怎样实现方法重载?这涉及到三个问题
1同名函数的调用问题
2函数中特殊的參数arguments
3怎样利用arguments实现方法重载
1同名函数的调用问题
都知道在js中假设存在多个名称同样的函数,则调用实际每次都仅仅使用最后一个,js事实上是没有重载的。也就是说。假设定义了多个同名的函数,单參数不一样,在调用时,js无论參数个数,仅仅管前后顺序
比如:
function test1(arg1)
{
alert("參数1:"+arg1);
}
function test1(arg1,arg2,arg3)
{
alert("參数1:"+arg1+"參数2:"+arg2+"參数3:"+arg3); }
//測试代码
function test(){
test1("1")
}
尽管我们调用的是test1("1")。传递了一个參数,但实际调用的却是test1(arg1,arg2,arg3)。并没有由于我们传递了一个參数。而调用仅仅有一个參数的方法。
2函数中特殊的參数arguments
假设我们使用例如以下的代码
function test1(arg1,arg2,arg3)
{
alert("參数1:"+arg1+"參数2:"+arg2+"參数3:"+arg3); }
function test1(arg1)
{
alert("參数1:"+arg1);
}
//測试代码
function test(){
test1("1"。"2")
}
我们知道调用的始终是test1(arg1),也就是仅仅有一个參数的函数,但怎样获取传递的其它參数呢?
这就要用到函数中特殊的參数arguments。arguments包括了全部传递给函数的參数
function test1()
{
var text="";
for(var i=0;i<arguments.length;i++){
text+="參数"+i+":"+arguments[i];
}
alert(text);
}
//測试代码
function test(){
test1("1");
test1("1"。"2");
test1("1"。"2","3");
}
经过測试发现,arguments包括了传递给函数的全部參数,而且arguments.length依据实际传递參数的个数的不同而不同,arguments.length代表了实际传递给函数參数的个数。
3怎样在js中实现函数的重载?
经过以上的測试发现。在js中不能直接实现函数的重载。但有没有办法实现类似重载效果的方法呢?
能够。主要就是利用arguments
比如:
function test1()
{
var text="";
if(arguments.length==1)
{
//调用一个參数的方法
}
else if(arguments.length==2)
{
//调用两个參数的方法
}
else { //其它的方法
}
}
js面向对象编程:怎样实现方法重载的更多相关文章
- PHP面向对象编程——深入理解方法重载与方法覆盖(多态)
什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将父对 ...
- JS面向对象编程,对象,属性,方法。
document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...
- Js面向对象编程
Js面向对象编程 1. 什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2. Js如何定义一个 ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- js面向对象编程(第2版)——js继承多种方式
附带书籍地址: js面向对象编程(第2版)
随机推荐
- 杂项-SpringEureka:笔记-1
ylbtech-杂项-SpringEureka:笔记-1 1.返回顶部 1. THE SELF PRESERVATION MODE IS TURNED OFF.THIS MAY NOT PROTECT ...
- Linux下清屏的方法
转自“https://blog.csdn.net/lis_12/article/details/54943626” clear,刷新屏幕,本质上是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之 ...
- 【BZOJ3926】【ZJOI2015】诸神眷顾的幻想乡 广义后缀自动机
题目: 题目在这里 思路&做法: 参考的题解 既然只有\(20\)个叶子节点, 那么可以从每个叶子节点往上建一颗\(trie\)树, 然后合并成一棵大的\(trie\)树, 然后构建广义后缀自 ...
- 使用multiprocessing解决PyMuPDF不支持多线程加载导致的界面卡死无响应问题,及一个PyQt5实现的简易PDF阅读器例子
最近在用PyMuPDF实现一个PDF阅读器,发现PyMuPDF在加载某些epub时耗时非常长,有的长达10几秒,会导致界面卡死无响应. 尝试用多线程后台加载,发现还是不能解决问题,和作者交流(issu ...
- JAVA 常用集合接口List、Set、Map总结
java中频繁使用List.Set.Map接口,将其总结如下 它们的继承与实现关系如下: Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└ ...
- 阿里云 linux centos 常用解压命令
格式: tar 选项 文件目录列表 功能: 对文件目录进行打包备份 选项: -c 建立新的归档文件 -r 向归档文件末尾追加文件 -x 从归档文件中解出文件 -O 将文件解开到 ...
- logrotate配置文件
一.logrotate配置文件 /etc/logrotate.conf
- 当接口上配了 FeignClient 和 RequestMapping 两个注解,结果错误提示 重复mapping处理方法
再接手老文档的时候,发现有这么一个问题 错误显示为: 原文档写法: 解决方法: 这是一个编译时写法的问题,将上方的RequestMapping去掉,然后把路径放在下面的PostMapping 便可以正 ...
- linux openSSL 安装
包名:openssh-server apt安装:apt-get install openssh-server yum安装:yum install openssh-server 服务启动:service ...
- QT4.8界面设计(MSVC2010X)
1.C++ IDE设计 MFC这种半死不活的windows C++平台已经被抛弃,很无奈.转向Qt的C++还是不错的选择. QT的QML才是最新的亮点,可惜没有时间经历这些东西了. 2.程序代码 2. ...