在JavaScript高级程序设计书中看到

ECMAScript函数中不能想传统意义上那样实现重载。而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参
数的类型和数量)不同即可。如前所述,ECMAScript函数没有签名,因为其参数是由包含多个值的数组来表示的。而没有函数签名,真正的重载是不可做到
的。但是ECMAScript函数可以通过检查传入函数中的参数的类型和数量并做出不同的反应,可以去模拟方法的重载。
深入理解的例子:
function addsomeSomeNumber(num){
  return num+=100;
}
function addsomeSomeNumber(num){
  return num+=200;
} addsomeSomeNumber(100)//300

显然,这个例子中声明了两个同名函数,而结果则是后面的函数覆盖了前面的函数。

因此,要模拟出重载的效果,只有两种方法:1.参数的类型;2.参数的数量

本人一开始学会的通过参数类型来实现重载的方法(这个虽然能实现,但是很好的写好)

function sum(type,a,b){
switch(type)
{
case 'sum':
return a+b;
break;
case 'mul':
return a*b;
break;
}
}

用Switch 语句通过参数类型来模拟出重载效果。

关于Switch 语句还有个有个小技巧:case的连续执行

function sum(type,a,b){
var s=;
switch(type)
{
case 'sum':
s += a+b;
case 'mul':
s += a*b;
return s;
break;
}
}

当执行函数sum('sum',1,2)时,他会执行出值,明明case 'sum'没有return,也会有值,因为函数没遇到break,它也运行了case ‘mul’的函数。

当然重载还有别的方式实现,下面就介绍argument,在JavaScript高级程序设计是这么写的

在ECMAScript中的参数在内部用一个数组(类数组)来表示。在函数体内可以通过arguments对象来访问这个参数数组,从而获取函数每一个参数。
arguments对象只是与数组类似(它并不是Array的实例),因为可以使用方括号语法访问ta它每一个元素(即第一个元素是arguments[]以此类推),
使用length属性来确定他传递进来多少个参数。

故可以用 arguments.length 来实现重载

var HeavyLoad = function () {
var length = arguments.length; //获取函数实参的个数
if (length === ) {
console.log('no-param');
return this;
} else if(length === ) {
console.log('');
return this;
} else if(length ===) {
console.log('');
return this;
} else {
console.log('');
return this;
}
};
HeavyLoad('a','b','c') //3

也可以根据传参的类型来重载

var HeavyLoad= function () {
if (typeof arguments[] === 'number') {
console.log('number');
} if (typeof arguments[] === 'string') {
console.log('string');
}
};
HeavyLoad() //number

递归阶乘函数的实现

arguments.callee是一个指向正在执行的函数指针,因此用它来是实现对函数的递归调用。(注释下js是单线程的,所以指向正在执行的函数,就是指向自己)
function factorial(num){
if(num <= ){
return ;
} else{
return num * arguments.callee(num-);
}
}

js重载的实现的更多相关文章

  1. JS 重载页面,本地刷新,返回上一页

    JS 重载页面,本地刷新,返回上一页 : <a href="javascript:history.go(-1)">返回上一页</a> <a href= ...

  2. JS重载

    Js 不支持函数的重载,可以用相同的名字在同一作用区域,定义两个函数,而不会引起错误,但真正使用的是最后一个. Js 不会验证传递给函数的参数个数是否和函数定义的参数的个数相同,开发人员定义的函数都可 ...

  3. js 重载i

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. js 重载(overload)

    1.js中不支持重载的语法.(因为js不允许多个同名函数存在) 解决:使用arguments类数组对象接收调用时所有传入的参数值. 2. arguments可以使用length属性,通过下标访问,不能 ...

  5. 关于js 重载

    拜读js忍者修炼一书 读到关于js函数重载内容这个模块 主要是介绍通过js的访问argument这个参数来实现js函数的重载 通过在函数内部进行判断js argument参数的长度 代码如下所示 va ...

  6. JS 重载父页面

    <script language=javascript> window.onload=function(){ //刷新父页面 window.opener.location.reload() ...

  7. js函数的伪重载

    这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...

  8. js 返回前一页并刷新页面方法

    [导读] 要返回上一页再刷新页面我们用到最多的是在像php,asp,jsp,asp.net中,下面我来给大家先介绍js 返回前一页并刷新页面,然后再把这些代码放在php中实现删除后返回当前页面并刷新页 ...

  9. Javascript基础 函数“重载”

    Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括.具体概念大家可以到网上查询). 所以Javascript ...

随机推荐

  1. 关于Android进程的启动和消亡

    在打开一个应用程序的时候,packagemanager会根据manifest文件去查找有没有相应的进程已启动,若果没有启动,那么就启动一个新的进程 进程退出有两种方式,用finish结束主activi ...

  2. 使用Meshlab软件将点云(Point Cloud)转换为模型(Mesh)

    使用Meshlab软件将点云(Point Cloud)转换为模型(Mesh) 启动Meshlab软件: 导入.ply点云文件: 接着点击: 弹出一个右侧边栏: 接着,计算每个点的法线: 输入100,点 ...

  3. p4171&bzoj1823 满汉全席

    传送门(洛谷) 传送门(bzoj) 题目 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能 ...

  4. 解决因为终端打印造成的java程序假死

    问题状态: java 程序 日志采用 log4j 运行时由另一个管理进程拉起,程序在后台运行. 现象: 程序后台运行时,运行一段时间后假死 分析原因: 尝试打印输出,定位假死的具体位置,发现出现假死的 ...

  5. 21. 从一道CTF靶机来学习mysql-udf提权

    这次测试的靶机为 Raven: 2 这里是CTF解题视频地址:https://www.youtube.com/watch?v=KbUUn3SDqaU 此次靶机主要学习 PHPMailer 跟 mymq ...

  6. 手写一个admin 组件------STARK

    开一个新的项目,,建立一个stark 包, 在里面创建一个service包,在service 包里创建一个stark.py 文件, 配置好环境, makemigreations, migreate. ...

  7. android build system resource links

    总体结构,参见这里:http://www.jayway.com/2012/10/24/a-practical-approach-to-the-aosp-build-system/ 一般应用的Andro ...

  8. http-server swagger-editor启动成功后,访问404的解决方法

    出现如图所示,则是swagger启动成功 但在网页访问是出现404,则查看下是否是在swagger-editor的目录下使用了该命令. 若在swagger-editor目录下使用命令启动,虽能启动成功 ...

  9. Libvirt代码架构

    Libvirt介绍 参考资料 Libvirt学习 通过virsh了解libvirt api的调用方式 通过virHypervisorDriver了解libvirt api的实现 virsh代码阅读 通 ...

  10. Isolation Forest算法实现详解

    本文介绍的 Isolation Forest 算法原理请参看我的博客:Isolation Forest异常检测算法原理详解,本文中我们只介绍详细的代码实现过程. 1.ITree的设计与实现 首先,我们 ...