js重载的实现
在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重载的实现的更多相关文章
- JS 重载页面,本地刷新,返回上一页
JS 重载页面,本地刷新,返回上一页 : <a href="javascript:history.go(-1)">返回上一页</a> <a href= ...
- JS重载
Js 不支持函数的重载,可以用相同的名字在同一作用区域,定义两个函数,而不会引起错误,但真正使用的是最后一个. Js 不会验证传递给函数的参数个数是否和函数定义的参数的个数相同,开发人员定义的函数都可 ...
- js 重载i
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- js 重载(overload)
1.js中不支持重载的语法.(因为js不允许多个同名函数存在) 解决:使用arguments类数组对象接收调用时所有传入的参数值. 2. arguments可以使用length属性,通过下标访问,不能 ...
- 关于js 重载
拜读js忍者修炼一书 读到关于js函数重载内容这个模块 主要是介绍通过js的访问argument这个参数来实现js函数的重载 通过在函数内部进行判断js argument参数的长度 代码如下所示 va ...
- JS 重载父页面
<script language=javascript> window.onload=function(){ //刷新父页面 window.opener.location.reload() ...
- js函数的伪重载
这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题. 在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数 没有重载?那怎么搞?!! ...
- js 返回前一页并刷新页面方法
[导读] 要返回上一页再刷新页面我们用到最多的是在像php,asp,jsp,asp.net中,下面我来给大家先介绍js 返回前一页并刷新页面,然后再把这些代码放在php中实现删除后返回当前页面并刷新页 ...
- Javascript基础 函数“重载”
Javascript不像其他编程语言一样具有函数签名(什么是函数签名,简单的说就是说函数的接受参数类型和参数个数,也有人认为返回类型也应该包括.具体概念大家可以到网上查询). 所以Javascript ...
随机推荐
- last 列出登入系统的用户相关信息
Linux last 命令介绍 功能说明:列出目前与过去登入系统的用户相关信息. 语法: last [-adRx][-f <记录文件>][-n <显示列数>][帐号名称. ...
- 面试题: Spring 框架 Bean的生命周期
[Java面试五]Spring总结以及在面试中的一些问题. 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本 ...
- 【mysql模糊查询的几种方式】
select * from activyty_code where acname like '%yj%' 1:%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分 ...
- ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转
using System.Data.SqlClient;...SqlConnection conn = new SqlConnection(@"server=ws7\leosql;datab ...
- Windows10安装node.js,vue.js以及创建第一个vue.js项目
[工具官网] Node.js : http://nodejs.cn/ 淘宝NPM: https://npm.taobao.org/ 一.安装环境 1.本机系统:Windows 10 Pro(64位)2 ...
- sql server 2008 r2安装
选择功能(好像报错了-下次重装系统测试)
- Codeforces - 102222H - Fight Against Monsters - 贪心
https://codeforc.es/gym/102222/problem/H 题意:有一堆怪兽,怪兽有HP和ATK.你有一个英雄,英雄每次先被所有怪兽打,然后打其中一个怪兽.打的伤害递增,第一次1 ...
- Go:json包的坑
import encoding/json func test() { m := make(map[string]string) a := `{"xiaoming":"男& ...
- Python 爬虫笔记
urllib python3 与 python2 的urllib很不一样,之前urllib2的方法基本上都变成了python3里的urllib.request模块中 import urllib.req ...
- jQuery easyUI id选择器 类选择器 标签选择器 属性选择器 及DOM对象和jQuery相互之间的转换
首先导入js文件 <%@ page language="java" contentType="text/html; charset=UTF-8" page ...