在网上看了一些js的重载文章,发现这篇解释得比较通俗易懂:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
javascript不能支持函数的重载,如下:
<script language="JavaScript">
function f(length)
{
alert("高为:"+length);
}
function f(length,width)
{
alert("高为:"+length+",宽为:"+width);
}
</srcipt>
上面那段代码其实是行不通的,因为函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,所以定义function(length),后面用f(10,10)调用是没有问题的。所以在上面这段代码中,第二个函数是永远不可能被调用到的,那么,要怎样才能实现像函数重载那样的功能呢?
那就是在函数定义中用f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式。
如下:
<script language="JavaScript">
function f()
{
var len= arguments.length;
if(1 == len)
{
var length = arguments[0];
var width = arguments[1];
f2(length,width);
}
else
{
var length = arguments[0];
f1(length);
}
}
function f1(length)
{
alert("高为:"+length);
}
function f2(length,width)
{
alert("高为:"+length+",宽为:"+width);
}
</srcipt>
这样,你就可以给函数f()传入一个参数也可以传入两个参数了,比如f(10)和f(10,10);
个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载的两个函数相差较大,那就保留两个函数,而如果两个函数的实现基本差不多,那么可以在一个函数中进行判断,处理不同的部分,而不需要像上面那样写成三个函数,如下:
<script language="JavaScript">
function f(length)
{
var len= arguments.length;
if(1 == len)
{
var width = arguments[1];
alert("高为:"+length+",宽为:"+width);
}
else
{
alert("高为:"+length);
}
}
</srcipt>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
以下备份一个可作参考,不同类型重载的例子
<script type='text/javascript'>
function ABC()
{
this.member = 1;
this.method = Show;
}
function Show(a,b,c)
{
this.member = 123;
if(arguments.length==1)
if(arguments[0].constructor == Number)
Show1_int.apply(this, arguments);
else if(arguments[0].constructor == Date)
Show1_date.apply(this, arguments);
else
Show1_string.apply(this, arguments);
if(arguments.length==2)
if(arguments[0].constructor == Array)
Show3.apply(this,arguments);
else
Show2.apply(this,arguments);
}
function Show1_int(a)
{
alert('1 integer input parameter ' + a+ ' methode is called');
}
function Show1_string(a)
{
alert('1 string input parameter ' + a+ ' methode is called');
}
function Show1_date(a)
{
alert('1 date input parameter ' + a+ ' methode is called');
}
function Show2(a,b)
{
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);
}
// 演示引用方式传递
function Show3(a,b)
{
arguments[0][0]=2;
alert('2 input parameter is transfer:\na:'+a+'\nb:'+b + '\nthe member is' + this.member);
}
var o = new ABC();
var arr = new Array();
arr[0]=321;
o.method(arr[0],2); // 值传递
alert(arr[0]); // 原始值未改变
o.method(arr,2); // 引用方式传递
alert(arr[0]); // 方法调用时被方法修改
o.method(new Date());
</script>
分享到:
相关推荐
本文介绍了一种实现JavaScript函数重载的方法,主要依赖于一个名为Overload的静态类。 首先,我们需要理解什么是函数重载以及在不同编程语言中是如何实现它的。举个例子,在C++或Java中,可以通过在同一个作用域内...
JavaScript是一种支持面向对象编程的语言,然而它的早期版本并不支持函数重载。函数重载是一种编程技术,允许在同一作用域内创建多个同名函数,但这些函数的参数个数或类型至少有一个不同。在其他支持此特性的编程...
在讲解JavaScript函数重载之前,我们先了解一下函数重载的概念。函数重载是一种编程技术,允许创建多个同名函数,但它们的参数类型、参数个数或参数顺序有所不同。这样,调用函数时,编译器或解释器可以根据传递的...
在面试中,面试官询问了关于JavaScript函数重载的实现方法,这表明在实际开发中,即使语言本身不支持,我们也可以通过某种方式来模拟函数重载的功能。面试者首先想到了使用arguments对象的length属性来判断实际传入...
JavaScript 作为一种动态类型语言,与静态类型的编程语言如Java或C#不同,它不支持原生的方法重载。然而,由于其灵活性,我们可以通过...同时,理解JavaScript函数参数的工作方式对于编写高效、无误的代码至关重要。
所以Javascript是不能像其他语言一样实现方法名相同,参数个数不同…的这类重载的,不信你可以试试: 代码如下: function show(){ alert(“1”); } function show(num1){ alert(num1); } ...
JavaScript函数重载是编程中的一个概念,它允许在同一个作用域内定义同名但参数不同的函数。在许多静态类型语言中,如C++或Java,函数重载是通过不同的参数列表来实现的,编译器会根据传入的参数类型和数量自动选择...
超全面javaweb教程28天-day3_08_js的函数重载
超全面javaweb教程28天-day3_09_js的函数重载二
这是因为JavaScript函数的参数是动态类型的,也就是说,无论你传递多少个参数,或者参数类型是什么,函数都能接收。这就是JavaScript的弱类型特性。但尽管如此,我们依然可以通过巧妙地利用`arguments`对象来模拟...
通过这种方式,尽管 JavaScript 不直接支持函数重载,但我们仍可以利用 `arguments` 对象和类型检查来模拟这一功能,从而在不同场景下实现类似重载的行为。需要注意的是,这种方法虽然实用,但可能会使代码变得复杂...
JavaScript(JS)重载是编程中的一个概念,它通常指的是在同一个函数名下定义多个具有不同参数列表的函数,使得根据传入的参数数量或类型,可以调用不同的实现。在许多面向对象的语言中,如Java或C++,函数重载是一...
用 leFunc 重载你的函数 它基本上提供了一种结构化的方式来检查你的函数。 在构建可以具有多种参数组合的 api 时,它特别有用。 var getItems = leFunc ( { "string" : function ( id ) { // Do something } , ...
根据ECMAScript的规范,函数名实际上是指向函数对象的引用,因此函数的名称并不能用来区分不同的函数实现,这就解释了为什么JavaScript不支持函数重载。 总结以上内容,可以清楚地了解到,JavaScript中没有函数重载...
总的来说,JavaScript虽然没有内置的构造函数重载支持,但通过参数检查和工厂方法、辅助构造函数等技巧,我们可以创建灵活且多样的对象初始化机制。这种灵活性是JavaScript作为动态语言的一大特点,也是开发者在设计...
### JavaScript重载函数实例剖析 #### 一、引言 在传统的面向对象编程语言如Java或C++中,重载(Overloading)是一种常见的特性,它允许开发者在同一作用域内定义多个同名但参数列表不同的方法。然而,在...