function能重载吗?

Magichi 2013-05-29 12:04:02
我写了两个相同函数名,一个有参,一个无参,我调用了无参的,怎么会去调用有参的?
难道是无法识别的?
...全文
262 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
街头小贩 2013-06-02
  • 打赏
  • 举报
回复
如果能看懂源码你看看jquery怎么写的: .animate( properties [, duration] [, easing] [, complete] ) []中参数可选的
街头小贩 2013-06-02
  • 打赏
  • 举报
回复
不是不能实现,但是不是你所说的叫话(重载)

	$.fn.wrapChildren = function(options) {
		var options = $.extend({
					childElem : undefined,
					sets : 1,
					wrapper : 'div',
					classet:''
		}, options || {});
		if (options.childElem === undefined) return this;
		return this.each(function() {
			var elems = $(this).children(options.childElem);
			var arr = [];
			elems.each(function(i,value) {
				arr.push(value);
				if (((i + 1) % options.sets === 0) || (i === elems.length -1)){
					var set = $(arr);
					arr = [];
					set.wrapAll($("<" + options.wrapper + ">").addClass(options.classet));
				}
			});
		});
	};
Magichi 2013-06-02
  • 打赏
  • 举报
回复
javascript是脚本语言,这个才是重点
熏肉大饼 2013-05-31
  • 打赏
  • 举报
回复
7楼 牛 js不可以重载原因是:(我的理解)var 是弱类型,所以无法通过参数的类型来重载,只有通过楼上switch(i)的方法来对参数个数的不同来重载,所以在一定程度上它就没有太大存在必要,因为它function(var a)就已经包括了各种基本数据类型;这就是javascript的好处;
沐汐 2013-05-31
  • 打赏
  • 举报
回复
7楼正解。。。。
ftszhang 2013-05-30
  • 打赏
  • 举报
回复
引用 7 楼 bbjbepzz 的回复:

function overridefn(){
	switch(arguments.length){
		case 1:
			(function(a){
				alert('只有一个参数:' + a);
			}).apply(this,arguments);
			break;
		case 2:
			(function(a,b){
				alert('两个参数:' + a + ' , ' + b);
			}).apply(this,arguments);
			break;
		default:
			(function(){
				alert('没有参数');
			}).apply(this);
			break;
	}
}
overridefn();
overridefn(1);
overridefn(1,2);
虽然没有重载,但是我们可以模拟
牛,就俩个字
NANU-NANA 2013-05-29
  • 打赏
  • 举报
回复
override
sweat89 2013-05-29
  • 打赏
  • 举报
回复
还不如写两个函数
卡布洛 2013-05-29
  • 打赏
  • 举报
回复
js的重载不是那么用的,js的重载只能模拟,不能跟c#或其他语言似的,根据参数来决定,你定义的那样会第二个覆盖第一个。 可以参考:http://www.jb51.net/article/1081.htm
JavaScript_R 2013-05-29
  • 打赏
  • 举报
回复
js没有重载; 这是常识,我都知道了
bbjbepzz 2013-05-29
  • 打赏
  • 举报
回复

function overridefn(){
	switch(arguments.length){
		case 1:
			(function(a){
				alert('只有一个参数:' + a);
			}).apply(this,arguments);
			break;
		case 2:
			(function(a,b){
				alert('两个参数:' + a + ' , ' + b);
			}).apply(this,arguments);
			break;
		default:
			(function(){
				alert('没有参数');
			}).apply(this);
			break;
	}
}
overridefn();
overridefn(1);
overridefn(1,2);
虽然没有重载,但是我们可以模拟
  • 打赏
  • 举报
回复
no................
coralandbill 2013-05-29
  • 打赏
  • 举报
回复
引用 1 楼 u010480479 的回复:
js的重载不是那么用的,js的重载只能模拟,不能跟c#或其他语言似的,根据参数来决定,你定义的那样会第二个覆盖第一个。 可以参考:http://www.jb51.net/article/1081.htm
+1
KK3K2005 2013-05-29
  • 打赏
  • 举报
回复
function test(){ if(arguments.length>0){ alert('有参数:'+arguments[0]); }else{ alert('无参数'); } } test(); test('kk');

87,902

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧