|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
语言是不是不是最重要的?ajax|asp.net|工具人们等候已久的ASP.NETAJAXv1.0正式版终究公布了。如今你能用MicrosoftASP.NETAJAX的javascript很简单的写出丰厚的、交互式的web使用。特别值得存眷的是MicrosoftAJAXLibrary增添了面向工具的撑持,而之前javascript是不撑持面向工具开辟的。如今icrosoftAJAXLibrary能很好的撑持类、名字空间、承继、接口、列举、反射等特性。这些新增添的功效相似于.NETFramework,这使得开辟ASP.NETAJAX使用变得简单保护,简单扩大。如今我们看看MicrosoftAJAXLibrary是怎样撑持以上特性的。
1.类、成员和名字空间
在MicrosoftAJAXLibrary中,一切的JavaScript类都承继自object(相似于.NETFramework库,都承继自object),在ASP.NETAJAX使用中你能够使用面向工具的编程形式创立承继自MicrosoftAJAX基类的工具和组件,类有四种成员:字段、属性、办法、事务。字段和属性是名/值对,用于形貌一个类的一个实例的特征的。字段是由复杂范例组成且可间接会见,比方:
myClassInstance.name="Fred"。
属性能够是任何复杂范例或援用范例,经由过程get和set办法会见。在ASP.NETAJAX中,get和set是自力的函数,并划定在函数名中利用前缀"get_"或"set_",比方要猎取或设置cancel属性的值时,你能够挪用get_cancel或set_cancel办法。
一个办法是完成一个举动的函数而不是前往一个属性的值。属性和办法鄙人面的例子里都有树模。
事务唆使特指的举措产生。当一个事务产生时,它能够挪用一个或多个函数。事务一切者能够完成守候事务产生的任何义务。
名字空间是对联系关系类的逻辑分组。名字空间使你能够对大众功效举行分组。
为了使ASP.NETWeb页面具有ASP.NETAJAX功效,你必需增加<asp:ScriptManager>控件到页面上,当页面启动时,参照ASP.NETAJAX库的剧本主动发生。
上面的例子显现了页面利用了<asp:ScriptManager>控件。
<asp:ScriptManagerrunat="server"ID="scriptManager"/>
上面的例子演示了怎样利用Type.registerNamespace和.registerClass办法来把Person类增添到Demo名字空间中、创立类然后注册类。
Type.registerNamespace("Demo");
Demo.Person=function(firstName,lastName,emailAddress){
this._firstName=firstName;
this._lastName=lastName;
this._emailAddress=emailAddress;
}
Demo.Person.prototype={
getFirstName:function(){
returnthis._firstName;
},
getLastName:function(){
returnthis._lastName;
},
getName:function(){
returnthis._firstName++this._lastName;
},
dispose:function(){
alert(bye+this.getName());
}
}
Demo.Person.registerClass(Demo.Person,null,Sys.IDisposable);
在剧本文件Namespace.js中界说了类Person,制订了类的名字空间为"Demo"。运转页面Namespace.aspx,点击按钮将创立一个Demo.Person类的实例。
2.会见润色
很多面向工具编程言语都有会见润色的观点。同意你指定类或成员在某种局限内无效。比方可在内部实行的程序、具有不异名字空间的外部类或特指的代码快内的类等。在JavaScript中没有会见润色,但在ASP.NETAJAX中商定以下划线字符开首"_"的被以为是公有的,类的内部不克不及会见。
3.承继
承继是一个类派生于另外一个类的才能。派生类主动承继基类的一切字段、属性、办法和事务。派生类能够增添新的成员大概重写基类已存在的成员来改动成员的举动。
上面的剧本实例有两个类Person和Employee,Employee从Person承继而来,两个类树模了公有字段的利用,它们都有大众属性、办法。别的Employee类重写了Person类的toString完成,并挪用了基类的功效。
Type.registerNamespace("Demo");
Demo.Person=function(firstName,lastName,emailAddress){
this._firstName=firstName;
this._lastName=lastName;
this._emailAddress=emailAddress;
}
Demo.Person.prototype={
getFirstName:function(){
returnthis._firstName;
},
getLastName:function(){
returnthis._lastName;
},
getEmailAddress:function(){
returnthis._emailAddress;
},
setEmailAddress:function(emailAddress){
this._emailAddress=emailAddress;
},
getName:function(){
returnthis._firstName++this._lastName;
},
dispose:function(){
alert(bye+this.getName());
},
sendMail:function(){
varemailAddress=this.getEmailAddress();
if(emailAddress.indexOf(@)<0){
emailAddress=emailAddress+@example.com;
}
alert(Sendingmailto+emailAddress+...);
},
toString:function(){
returnthis.getName()+(+this.getEmailAddress()+);
}
}
Demo.Person.registerClass(Demo.Person,null,Sys.IDisposable);
Demo.Employee=function(firstName,lastName,emailAddress,team,title){
Demo.Employee.initializeBase(this,[firstName,lastName,emailAddress]);
this._team=team;
this._title=title;
}
Demo.Employee.prototype={
getTeam:function(){
returnthis._team;
},
setTeam:function(team){
this._team=team;
},
getTitle:function(){
returnthis._title;
},
setTitle:function(title){
this._title=title;
},
toString:function(){
returnDemo.Employee.callBaseMethod(this,toString)+
+this.getTitle()+
+this.getTeam();
}
}
Demo.Employee.registerClass(Demo.Employee,Demo.Person);
Inheritance.js剧本文件中界说了两个类:Person和Employee,Employee是从Person承继而来。每一个类都有字段、大众属性和办法。别的,Employee类重写了toString的完成,并在重写的代码中挪用了基类的功效。在这个例子中把类Person的名字空间设定为"Demo"。运转页面Inheritance.aspx,点击“创立工具”、“工具开释”、“大众和公有属性”、“工具办法”、“重写办法”,“工具范例反省”体验一下。
4.接口
接口是类要完成的逻辑协定,是对类举行集成的大众恪守的标准。它能使多个类和统一个接口把完成界说和类的详细完成分离起来。上面的例子界说了一个基类Tree和接口IFruitTree,Apple和Banana这两个类完成了接口IFruitTree,但Pine类没有完成接口IFruitTree。
Type.registerNamespace("Demo.Trees");
Demo.Trees.IFruitTree=function(){}
Demo.Trees.IFruitTree.Prototype={
bearFruit:function(){}
}
Demo.Trees.IFruitTree.registerInterface(Demo.Trees.IFruitTree);
Demo.Trees.Tree=function(name){
this._name=name;
}
Demo.Trees.Tree.prototype={
returnName:function(){
returnthis._name;
},
toStringCustom:function(){
returnthis.returnName();
},
makeLeaves:function(){}
}
Demo.Trees.Tree.registerClass(Demo.Trees.Tree);
Demo.Trees.FruitTree=function(name,description){
Demo.Trees.FruitTree.initializeBase(this,[name]);
this._description=description;
}
Demo.Trees.FruitTree.prototype.bearFruit=function(){
returnthis._description;
}
Demo.Trees.FruitTree.registerClass(Demo.Trees.FruitTree,Demo.Trees.Tree,Demo.Trees.IFruitTree);
Demo.Trees.Apple=function(){
Demo.Trees.Apple.initializeBase(this,[Apple,redandcrunchy]);
}
Demo.Trees.Apple.prototype={
makeLeaves:function(){
alert(Medium-sizedanddesiduous);
},
toStringCustom:function(){
returnFruitTree+Demo.Trees.Apple.callBaseMethod(this,toStringCustom);
}
}
Demo.Trees.Apple.registerClass(Demo.Trees.Apple,Demo.Trees.FruitTree);
Demo.Trees.GrannySmith=function(){
Demo.Trees.GrannySmith.initializeBase(this);
//Youmustsetthe_descriptionfeildafterinitializeBase
//oryouwillgetthebasevalue.
this._description=greenandsour;
}
Demo.Trees.GrannySmith.prototype.toStringCustom=function(){
returnDemo.Trees.GrannySmith.callBaseMethod(this,toStringCustom)+...itsGrannySmith!;
}
Demo.Trees.GrannySmith.registerClass(Demo.Trees.GrannySmith,Demo.Trees.Apple);
Demo.Trees.Banana=function(description){
Demo.Trees.Banana.initializeBase(this,[Banana,yellowandsquishy]);
}
Demo.Trees.Banana.prototype.makeLeaves=function(){
alert(Bigandgreen);
}
Demo.Trees.Banana.registerClass(Demo.Trees.Banana,Demo.Trees.FruitTree);
Demo.Trees.Pine=function(){
Demo.Trees.Pine.initializeBase(this,[Pine]);
}
Demo.Trees.Pine.prototype.makeLeaves=function(){
alert(Needlesinclusters);
}
Demo.Trees.Pine.registerClass(Demo.Trees.Pine,Demo.Trees.Tree);
Interface.js剧本文件中界说了一个Tree基类和一个IFruitTree接口。Apple和Banana两个承继类完成了IFruitTree接口,而Pine类没有完成IFruitTree接口。运转Interface.aspx,点击“工具创立”、“接口反省”、“挪用接口办法”体验一下。
5.列举
列举是包括一组被定名的正整数常数的类。你能够像会见属性一样会见它的值。比方:
myObject.color=myColorEnum.red,列举供应了一种很简单了解的整数暗示。上面的例子界说了一个以十六进制数暗示的色彩被定名为成心义的名字的列举范例。
Type.registerNamespace("Demo");
//Defineanenumerationtypeandregisterit.
Demo.Color=function(){};
Demo.Color.prototype=
{
Red:0xFF0000,
Blue:0x0000FF,
Green:0x00FF00,
White:0xFFFFFF
}
Demo.Color.registerEnum("Demo.Color");
运转Enumeration.aspx,选择下拉框中的色彩,剧本程序把背景致设为选中的列举范例Demo.Color中的色彩。
6.反射
反射用于反省一个运转期程序的布局和构成,是经由过程类Type的API来完成反射的,这些办法使你可以搜集一个工具的信息,比方:它是承继于哪一个类、它是不是完成类某个特指的接口、它是不是是某个类的实例等。
上面的例子用反射的API测试GrannySmith类是不是完成了后面的接口。运转Reflection.aspx,点击“反省范例”、“反省承继”、“反省接口”体验一下。
别的必要申明的一点是,MicrosoftAJAXLibrary是基于开放系统架构而开辟的,不单单用于asp.net,还能用于别的系统架构中,比方用在java中。兄弟们,想来你们都看过了昨天的比赛了。我现在的痛苦状跟当时应该差不多。希望本版.net老师不吝赐教,为小弟这一批迷途的羊羔指一条阳光之道!您也知道:学习技术如果只有一个人摸索,那是一件多么痛苦的事情!还有,如果万辛能得名师或长者指点,那又是多么一件幸福和快乐的事情! |
|