JavaScript的重載函數(shù),一般是靠對arguments判斷來操作的。
伊州網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
比如:
復(fù)制代碼
代碼如下:
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);
}
}
可以想象如果重載數(shù)量多的時候,要有多少的if-else判斷啊(事實上重載數(shù)量應(yīng)該不會太多吧)。
如果要對js函數(shù)進行重載,代碼量肯定是多的。那么能不能想辦法使代碼清晰點,再減少那些相同代碼的書寫呢?
這就是我寫篇文章和相關(guān)代碼的起因了。
慣例先上代碼:
復(fù)制代碼
代碼如下:
/**
KOverLoad
一個創(chuàng)建重載函數(shù)的輔助方法。
其實這個方法只是幫忙整理了參數(shù)不同的情況下的重載方法。
如果還要對參數(shù)類型進行判斷重載的話,請在提供的方法中自己實現(xiàn)。
@Author
ake
2010-05-02
@weblog
*/
var
KOverLoad
=
function(scope)
{
this.scope
=
scope
||
window;
//默認(rèn)添加方法到這個對象中。同時添加的方法的this指向該對象。
this.list
=
{};
//存放重載函數(shù)的地方。
return
this;
};
KOverLoad.prototype
=
{
//添加一個重載的方法。
//@param
argFunction
重載的方法。
add:function(arg)
{
if(typeof
arg
==
"function")
{
this.list[arg.length]
=
arg;
//以參數(shù)數(shù)量做標(biāo)識存儲重載方法。很顯然如果你的重載方法參數(shù)數(shù)量
}
return
this;
},
//添加完所有的重載函數(shù)以后,調(diào)用該方法來創(chuàng)建重載函數(shù)。
//@param
fcString
重載函數(shù)的方法名。
load:function(fc)
{
var
self
=
this,
args,
len;
this.scope[fc]
=
function()
{
//將指定作用域的指定方法
設(shè)為重載函數(shù)。
args
=
Array.prototype.slice.call(arguments,
0);
//將參數(shù)轉(zhuǎn)換為數(shù)組。
len
=
args.length;
if(self.list[len])
{
//根據(jù)參數(shù)數(shù)量調(diào)用符合的重載方法。
self.list[len].apply(self.scope,
args);
//這里指定了作用域和參數(shù)。
}else{
throw
new
Error("undefined
overload
type");
}
}
}
};
使用
方法是我覺得比較清晰的方法:
//這是可選的作用對象。
復(fù)制代碼
代碼如下:
var
s
=function(){}
s.prototype
=
{
init:function()
{
console.log();
}
}
//構(gòu)造函數(shù)的參數(shù)可以是Object類型的或者其他合法的類型,如果不指定,則注冊到window對象中,并且作用域也是window。其實就是添加該重載方法到什么地方而已。
復(fù)制代碼
代碼如下:
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");
//在這里的參數(shù)就是要創(chuàng)建的重載函數(shù)的方法名稱。
完成以上操作以后,s.func就是一個重載函數(shù)。
我們可以這樣調(diào)用重載函數(shù):
復(fù)制代碼
代碼如下:
var
t
=
new
s();
t.func();//拋出錯誤異常。因為沒有指定零參數(shù)時的函數(shù)
t.func(”o”);//one
o
Object
{}
t.func(1,2);//two
1
2
Object
{}
簡單的代碼而已,如果各位有建議或者意見,歡迎留言指教。
當(dāng)然可以,你可以試一下的。有匿名函數(shù)的概念。
javascript
的函數(shù)你也可以把它當(dāng)成一個變量來理解的
比如
function
a(){}
相當(dāng)于定義了一個變量
var
a
=
function(){}
局部刷新和你理解的不太一樣,局部刷新會用到AJAX,js會通過一個特殊的對象異步的向服務(wù)器發(fā)起請求,等到服務(wù)器返回后,js根據(jù)返回的結(jié)果去更新頁面的某個部分。
舉個例子吧,假如你寫了一個生成表格的ashx,這樣就可以在前臺去請求這個ashx,
$.get("test.ashx", {}, function(responseText)
{
//假如test.ashx返回的是一段html代碼
$("#div").html(responseText);
});
這樣就可以無刷新的更新某個div了。
關(guān)于這方面的內(nèi)容你可以查閱下AJAX(已經(jīng)火了很久了哈)的相關(guān)資料。
你好,Javascript 的函數(shù)的參數(shù)可以有多個,但你在使用的時候可以不傳入齊全的參數(shù) 這樣就可以了比如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");}