javascript函数能重载吗?
比如定义了三个名字一样的函数,一个没有参数,一个有一个参数,一个有两个参数,然后调用时根据给予的参数个数它自己能认得调用那个吗?...
比如定义了三个名字一样的函数,一个没有参数,一个有一个参数,一个有两个参数,然后调用时根据给予的参数个数它自己能认得调用那个吗?
展开
6个回答
展开全部
javascript函数的重载和java的重载方式不一样。
定义JavaScript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数按照定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。所以,js重载函数需要通过函数代码判断参数值和类型实现。
通常定义函数时,把必选参数放在参数列表最前面,可选参数放在参数放在参数列表必须参数后面,方便函数重载。
定义JavaScript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数按照定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。所以,js重载函数需要通过函数代码判断参数值和类型实现。
通常定义函数时,把必选参数放在参数列表最前面,可选参数放在参数放在参数列表必须参数后面,方便函数重载。
展开全部
<script type="text/javascript">
//js是不支持重载的,通过但是arguments以及prototype可以实现重载和继承的效果:
//1,通过arguments对象,去判断函数的参数个数:
function doAdd(){
if(arguments.length==1){
alert(arguments[0]+10);
}else if(arguments.length==2){
alert(arguments[0]+ arguments[1]);
}
}
doAdd(10); //outputs 20
doAdd(20,30); //outputs 50
/*备注:开发人员定义的函数都可以接受任意个数的参数(根据NetScript 文档,最多能接受25个) ,而不会引发错误,任何遗漏的参数都会用undefined 代替,多余的参数被将忽略。*/
//2,通过prototype对象实现继承,添加新的属性和方法
function persona(){
this.a = 'A';
this.sayA = function(){
alert('My name is a')
}
}
function personb(){
this.b = 'B';
this.sayB = function(){
alert('My name is b')
}
}
var a = new persona();
personb.prototype = a;
var b = new personb(); //此时b函数拥有了a的属性和方法
alert(b.a);//outputs :A
b.sayA(); //outputs :my name is a
alert(b.b);//outputs :B
b.sayB(); //outputs :my name is a
</script>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不能函数重载。
原因是js中唯一识别函数的就是函数的函数名。
原因是js中唯一识别函数的就是函数的函数名。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的那种是可以的 这种函数一般叫做构造函数
就是方法名相同 参数类型或参数个数不同
就是方法名相同 参数类型或参数个数不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询