重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
JavaScript的重载函数,一般是靠对arguments判断来操作的。
伊州网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
比如:
复制代码
代码如下:
var
afunc
=
function()
{
args
=
arguments;
if(args.length
==
1)
{
console.log(1);
}else
if(args.length
==
2)
{
console.log(2);
}else
if
(args.length
==
3)
{
console.log(3);
}
}
可以想象如果重载数量多的时候,要有多少的if-else判断啊(事实上重载数量应该不会太多吧)。
如果要对js函数进行重载,代码量肯定是多的。那么能不能想办法使代码清晰点,再减少那些相同代码的书写呢?
这就是我写篇文章和相关代码的起因了。
惯例先上代码:
复制代码
代码如下:
/**
KOverLoad
一个创建重载函数的辅助方法。
其实这个方法只是帮忙整理了参数不同的情况下的重载方法。
如果还要对参数类型进行判断重载的话,请在提供的方法中自己实现。
@Author
ake
2010-05-02
@weblog
*/
var
KOverLoad
=
function(scope)
{
this.scope
=
scope
||
window;
//默认添加方法到这个对象中。同时添加的方法的this指向该对象。
this.list
=
{};
//存放重载函数的地方。
return
this;
};
KOverLoad.prototype
=
{
//添加一个重载的方法。
//@param
argFunction
重载的方法。
add:function(arg)
{
if(typeof
arg
==
"function")
{
this.list[arg.length]
=
arg;
//以参数数量做标识存储重载方法。很显然如果你的重载方法参数数量
}
return
this;
},
//添加完所有的重载函数以后,调用该方法来创建重载函数。
//@param
fcString
重载函数的方法名。
load:function(fc)
{
var
self
=
this,
args,
len;
this.scope[fc]
=
function()
{
//将指定作用域的指定方法
设为重载函数。
args
=
Array.prototype.slice.call(arguments,
0);
//将参数转换为数组。
len
=
args.length;
if(self.list[len])
{
//根据参数数量调用符合的重载方法。
self.list[len].apply(self.scope,
args);
//这里指定了作用域和参数。
}else{
throw
new
Error("undefined
overload
type");
}
}
}
};
使用
方法是我觉得比较清晰的方法:
//这是可选的作用对象。
复制代码
代码如下:
var
s
=function(){}
s.prototype
=
{
init:function()
{
console.log();
}
}
//构造函数的参数可以是Object类型的或者其他合法的类型,如果不指定,则注册到window对象中,并且作用域也是window。其实就是添加该重载方法到什么地方而已。
复制代码
代码如下:
new
KOverLoad(s.prototype).add(function(a)
{
console.log("one",a,this)
})
.add(function(a,b)
{
console.log("two",a,b,this)
})
.add(function(a,b,c)
{
console.log("three",a,b,c,this)
})
.add(function(a,b,c,d)
{
console.log("four",a,b,c,d,this)
})
.load("func");
//在这里的参数就是要创建的重载函数的方法名称。
完成以上操作以后,s.func就是一个重载函数。
我们可以这样调用重载函数:
复制代码
代码如下:
var
t
=
new
s();
t.func();//抛出错误异常。因为没有指定零参数时的函数
t.func(”o”);//one
o
Object
{}
t.func(1,2);//two
1
2
Object
{}
简单的代码而已,如果各位有建议或者意见,欢迎留言指教。
当然可以,你可以试一下的。有匿名函数的概念。
javascript
的函数你也可以把它当成一个变量来理解的
比如
function
a(){}
相当于定义了一个变量
var
a
=
function(){}
局部刷新和你理解的不太一样,局部刷新会用到AJAX,js会通过一个特殊的对象异步的向服务器发起请求,等到服务器返回后,js根据返回的结果去更新页面的某个部分。
举个例子吧,假如你写了一个生成表格的ashx,这样就可以在前台去请求这个ashx,
$.get("test.ashx", {}, function(responseText)
{
//假如test.ashx返回的是一段html代码
$("#div").html(responseText);
});
这样就可以无刷新的更新某个div了。
关于这方面的内容你可以查阅下AJAX(已经火了很久了哈)的相关资料。
你好,Javascript 的函数的参数可以有多个,但你在使用的时候可以不传入齐全的参数 这样就可以了比如function test(a1,a2){if(a1!=null){alert('a1');}else if(a2!=null){alert('a1 and a2');}else{alert('no argument');}}使用的时候你可以用 test('a1'); test('a1','a2');
js的重写很简单,只要重新写下这个方法就好了
如下
function aaa()
{
alert("aaa");
}
aaa = function()
{ alert("bbb");}