js模拟如何实现重载以及默认参数

 更新时间:2022年05月11日 16:55:49   作者:TimeTDIT  
这篇文章主要介绍了js模拟如何实现重载以及默认参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

模拟实现重载以及默认参数

众所周知,js是函数不支持重载和默认参数的,但是我们可以使用一些其他方法来模拟这个方法的实现。

  • 首先看一下重载的定义:函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同。
  • 以及默认参数的定义:默认参数指的是当函数调用中省略了实参时自动使用的一个值。

那么如何实现这两个功能呢,一个很简单的方法就是使用arguments来进行模拟。

下面先说实现重载的方法

	function overLoad(){//用这样的方法模拟重载
		if(arguments[0]){//如果存在第一个参数
			if(arguments[1]){//如果第一个参数第二个参数都存在
				//to do...
				alert(arguments[0]+arguments[1]);
			}
			else{//如果只有第一个参数
				alert(arguments[0]);
				//to do...
			}
		}
		else{//如果无参
			alert("null");
			//to do...
		}
	}

接下来是实现默认参数的方法

function defaultArg(){//用这样的方法模拟默认参数
    var a = arguments[0]?arguments[0]:"hello";//第一个参数的默认值为hello
    var b = arguments[1]?arguments[1]:"world";//第二个参数的默认值为world
    //...
    alert(a+b);
}

下面进行一下测试

//重载测试
overLoad();//null
overLoad("hello ");//hello 
overLoad("hello ","world");//hello world
//默认参数测试
defaultArg();//hello world
defaultArg("你好 ");//你好 world
defaultArg("你好 ","世界");//你好 世界

js的函数支持重载吗

JavaScript的函数支持重载吗?对于这个问题,主要有两个点,第一,JavaScript的函数;第二,重载。

首先,说一下重载。所谓重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。所以说,重载主要需要两点:第一,同样的函数名。第二,不同的函数参数。

明确了重载的定义之后,我们再回到JavaScript这里。追本溯源,现在一说到JavaScript,我们就可以联想到ECMAScript,即JavaScript的标准。那么,这个标准里面对函数做出了那些规范呢?

首先,ECMAScript是没有函数签名的概念的,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。

其次,如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数,如下:

function add(num){
    return num+1;
}
function add(num){
    return num+2;
}
var result = add(4);  //结果为6

在上面的例子中,add()函数被定义了两次,然而,当我们调用他的时候,却直接调用了第二个函数,这说明在JavaScript中,后定义的函数会覆盖先定义的函数。

说到这里,是不是就可以判定JavaScript不支持函数重载了呢?

让我来介绍一下JavaScript里面的一个arguments对象。首先,ECMAScript函数的参数与其他语言的函数参数有一点不同。ECMAScript函数不介意传进来的参数个数和类型。也就是说,在你定义了函数只接受两个参数之后,你仍然可以在调用的时候传递零或多个参数。这并不会报错。原因就在于arguments对象。ECMAScript中,函数的参数始终是存放在一个数组中,而通过arguments对象,就可以访问到这个数组。所以,只需要使用length属性就可以确定调用函数时传递了多少个参数。

说到这里,我们可以来尝试这样写:

function add(num1, num2){
    if(arguments.length == 1){
        alert("你输入的只有一个数字:"+arguments[0]+" 请重新输入");
    }else if(arguments.length == 2){
        alert("你输入数字的和为:" + arguments[0]+arguments[1]);
}
}

通过这个例子,我们可以看出,通过检查传入函数中参数的数量,JavaScript函数可以做出不同的反应,这可以间接达到重载的目的。

所以,JavaScript是可以模仿函数的重载的。 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 通过原生JS实现为元素添加事件的方法

    通过原生JS实现为元素添加事件的方法

    下面小编就为大家带来一篇通过原生JS实现为元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 如何将网页表格内容导入excel

    如何将网页表格内容导入excel

    这篇文章主要介绍了如何将网页表格内容导入excel,需要的朋友可以参考下
    2014-02-02
  • 使用 JavaScript 进行函数式编程 (一) 翻译

    使用 JavaScript 进行函数式编程 (一) 翻译

    本文是函数式编程系列的第一篇文章。这里我会简要介绍一下编程范式,然后会直接介绍使用 Javascript 进行函数式编程的概念,因为 JavsScript 是最被认可的函数式程序语言之一。我们鼓励读者通过参考资料部分进一步了解这一迷人的概念
    2015-10-10
  • 关于使用js算总价的问题

    关于使用js算总价的问题

    下面小编就为大家带来一篇关于使用js算总价的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • ES6之模版字符串的具体使用

    ES6之模版字符串的具体使用

    这篇文章主要介绍了ES6之模版字符串的具体使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • JavaScript字符串常用类使用方法汇总

    JavaScript字符串常用类使用方法汇总

    今天的这篇文章就分享几年以来总结的一些最常见和最有用的字符串相关的方法的例子和简要说明。便于程序员用于快速参考。当然,最有经验的开发人员对这些操作很熟悉,但我认为这是一个很好的方法帮助初学者理解这些函数,他可以帮助你使用简单的语法,完成复杂的操作.
    2015-04-04
  • typescript使用 ?. ?? ??= 运算符的方法步骤

    typescript使用 ?. ?? ??= 运算符的方法步骤

    本文主要介绍了typescript使用 ?. ?? ??= 运算符的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • JavaScript中call、apply、bind实现原理详解

    JavaScript中call、apply、bind实现原理详解

    其实在很多文章都会写call,apply,bind,但个人觉着如果不弄懂原理,是很难理解透的,所以这篇文章主要介绍了JavaScript中call、apply、bind实现原理的相关资料,需要的朋友可以参考下
    2021-06-06
  • 基于three.js编写的一个项目类示例代码

    基于three.js编写的一个项目类示例代码

    这篇文章主要给大家介绍了关于基于three.js编写的一个项目类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • js技巧--转义符"\"的妙用

    js技巧--转义符"\"的妙用

    js技巧--转义符"\"的妙用...
    2007-01-01

最新评论