[ASP.NET AJAX]Function對(duì)象及Type類(lèi)的方法介紹
2024-09-01 08:29:53
供稿:網(wǎng)友
上一回我們從總體上認(rèn)識(shí)了JavaScript Microsoft AJAX Library由于臨時(shí)有事,沒(méi)有加入事例顯得有點(diǎn)抽象,這一回一定會(huì)通過(guò)一些事例更加直觀的來(lái)會(huì)一會(huì)Asp.NET Ajax腳本庫(kù)中一個(gè)很是重要的類(lèi)Type。這個(gè)類(lèi)提供了一些擴(kuò)展面向?qū)ο缶幊痰囊恍┓瓷浞椒ǎㄟ^(guò)這個(gè)類(lèi)我們可以注冊(cè)類(lèi)似.NET中的一些(如:命名空間,類(lèi),枚舉等等)基本類(lèi)型。這個(gè)Type類(lèi)繼承自window是一個(gè)Global類(lèi)型,不屬于任何命名空間。下面我們來(lái)看看Type中的一些基本方法以及是怎樣實(shí)一些方法的實(shí)現(xiàn)方式...
在認(rèn)識(shí)Type類(lèi)之前,我們首先要來(lái)看一看一個(gè)很重要的對(duì)象,那就是Function對(duì)象。Function對(duì)象是JavaScript的內(nèi)部對(duì)象,例如:日期對(duì)象(Date),數(shù)組對(duì)象(Array),字符對(duì)象(String)以及(Object,RegExp,Math,Error等)都屬于這種,可以通過(guò)new來(lái)實(shí)例化一個(gè)對(duì)象。除了我們常見(jiàn)的JavaScript申明的函數(shù),我們也可以用以下的方法構(gòu)建我們的函數(shù)對(duì)象:var myFunction=new Function(arguments,statement)。由于我對(duì)腳本不是很熟悉,對(duì)prototype(不過(guò)聽(tīng)說(shuō)是通過(guò)給出一個(gè)原型對(duì)象來(lái)指明所要?jiǎng)?chuàng)建的對(duì)象的類(lèi)型,然后用這個(gè)原型對(duì)象的方法創(chuàng)建出更多同類(lèi)型的對(duì)象,原始模型模式屬于對(duì)象的創(chuàng)建模式)也不是很了解,不過(guò)經(jīng)過(guò)我簡(jiǎn)單的測(cè)試了一下,如果對(duì)Function進(jìn)行prototype擴(kuò)展可以通過(guò)new來(lái)申明對(duì)象后再引用他,也可以直接調(diào)用Function.(方法或函數(shù))。如果直接運(yùn)用Function.uName來(lái)擴(kuò)展這個(gè)uName就只能通過(guò)Function.uName調(diào)用,這讓我想起了.NET中的靜態(tài)方法(C#:static;VB:share),有了這些我們來(lái)看看Asp.NET Ajax中對(duì)Function擴(kuò)展的幾個(gè)對(duì)象:
代碼如下:
Function.__typeName="Function";
Function.createCallback=function(b,a){
return function(){
var e=arguments.length;
if(e>0){
var d=[];
for(var c=0;c<e;c++)
d[c]=arguments[c];
d[e]=a;
return b.apply(this,d)
}
return b.call(this,a)
}
};
Function.createDelegate=function(a,b){
return function(){
return b.apply(a,arguments)
}
};
Function.emptyFunction=Function.emptyMethod=function(){};
從上面我們可以看出Function擴(kuò)展了一個(gè)屬性(__typeName)和幾個(gè)方法(我們可以把它看成.NET中的靜態(tài)對(duì)象來(lái)調(diào)用,如果用new Function();再來(lái)調(diào)用就會(huì)得到"undefined";可能這是JavaScript最基本的東西,但是我以前沒(méi)有用過(guò)這種對(duì)象來(lái)寫(xiě)過(guò)腳本,也沒(méi)有系統(tǒng)的學(xué)過(guò)JavaScript,所以不要笑話(huà)我哦:)正在學(xué)習(xí)中...),在上面我還發(fā)現(xiàn)了一個(gè)比較少見(jiàn)的call/apply;網(wǎng)上搜了一下發(fā)現(xiàn)在<<全面理解javascript的caller,callee,call,apply概念>>有比較詳細(xì)的介紹。如果我沒(méi)猜錯(cuò)的話(huà):Function.createCallback("callback method","callback argument")和回調(diào)有關(guān);Function.createDelegate("object通常用this","執(zhí)行的方法"),即通過(guò)Function.createDelegate創(chuàng)建的代理方法繼承了b方法,從而來(lái)完成整個(gè)代理的過(guò)程(不知道是否正確!);Function.emptyFunction/Function.emptyMethod應(yīng)該是為了接口和虛函數(shù)而準(zhǔn)備的。