在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. BAT小米奇虎美团迅雷携程等等各大企业校招,笔试面试题。

    类似在线测试的方式展示题目. 历年在线笔试试卷: 百度 http://www.nowcoder.com/paper/search?query=%E7%99%BE%E5%BA%A6  腾讯http:// ...

  2. 获取服务器IP,客户端IP

    客户端IP相关的变量 1. $_SERVER['REMOTE_ADDR']; 客户端IP,有可能是用户的IP,也有可能是代理的IP. 2. $_SERVER['HTTP_CLIENT_IP']; 代理 ...

  3. CentOS 7 配置 mariadb

    一.安装mariadb :  yum groupinstall  mariadb  mariadb-client -y 二.启动(设置开机启动)服务 : systemctl  start (enabl ...

  4. Lua中的点、冒号与self

    Lua中的点.冒号与self,它们之间的关系主要体现在函数的定义与调用上,Lua在函数定义时可以用点也可以用冒号,如: function mytable.fun(p) return p end fun ...

  5. 第五篇 elasticsearch express插入数据

    1.后端 在elasticsearch.js文件夹下添加: function addDocument(document) { return elasticClient.index({ index: i ...

  6. base64 数据加密

    1.新建一个base64.js文件 添加下面的代码 /* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp> * Version: 1.0 ...

  7. 杭电acm 1040题

    本题是一个非常简单的升序排序题目,但那时在做的时候把题目看错了,导致花费了大量的时间来检查为什么WA,最后发现题目看错了..... /********************************* ...

  8. 【Hadoop】hiveserver2 不能启动端口 10000 开启服务的相关经验总结

    转载来自http://blog.csdn.net/lsttoy/article/details/53490144. 这个问题困扰了我三天,各种查资料踩坑填坑的尝试,终于搞定了这个问题. 首先来品尝下喜 ...

  9. invalid loc header的解决办法

    eclipse 运行程序,报invalid loc header,网上一查,删除maven仓库(默认位于%USERPROFILE%\.m2\repository\org)中的下载包,然后重新下载.

  10. Boost Python官方样例(三)

    导出C++类(纯虚函数和虚函数) 大致做法就是为class写一个warp,通过get_override方法检测虚函数是否被重载了,如果被重载了调用重载函数,否则调用自身实现,最后导出的时候直接导出wa ...