使用JScript.NET创建asp.net页面
核心提示:使用JScript.NET创建asp.net页面,浏览使用JScript.NET创建asp.net页面,大家1定习惯于使用vb.net和C#来创建asp.net页面,但是不知大家知不知道我们还可使用Jscript.net编写asp.net.这多是自微软1996年推出基于IE3.0的Jscript1.0以来在功能上最大的奔腾。JScript传统
大家1定习惯于使用vb.net和C#来创建asp.net页面,但是不知大家知不知道我们还可使用Jscript.net编写asp.net.
这多是自微软1996年推出基于IE3.0的Jscript1.0以来在功能上最大的奔腾。JScript传统上被用作开发客户端脚本。在internet上它普遍存在,特别是在Activeseverpage(ASP)中。
当脚本变得很大的时候,程序员需要编写更有效的代码;并且程序变得越来越复杂,程序员常常遭到Jscript的局限性。
假设你对Jscript很熟习的话,你将很快的在.net平台上使用Jscript.net,应为Jscript.net就像是Jscript的升级版,而不是1门新的语言。
Jscript.net最新的特性是Jscript.net是真实的编译语言。这使它完全可以与vb.net和C#相媲美。从语法方面,Jscript.net改良了变量类型的定义,不但支持明确的变量类型定义,还支持模糊的变量类型定义。模糊定义是1项激动人心的技术,它可以分析你脚本中使用的变量,并且推断出变量的类型。这就意味着你可使用未定义的变量并以更快的速度履行。
请参照下面的例子:
functiontest()
{
for(varx=0;x<100;x++)
{
print(x);
}
}
当Jscript.net编译这个程序的时候,它分析变量X的用处并肯定变量X只用做数值型,结果变量被安全的定义为数值型。技术进步在于把变量定义为数值型要明显优于把变量定义为genericObject或variant。
为了实现Jscript.net的推断变量类型的功能,你需要遵照以下几条规则!
1.永久声明你的局部变量。这看起来像是不言而喻的,但是这是非常重要的,Jscript.net只能推断你的局部变量,而不是全局变量。假设你没有声明它,直接使用,它就将成为全局变量,将不能被优化。
2.仅使用1种数据类型,假设你声明1个数值型变量,却用来贮存字符型的数据,Jscript将把该变量定义为genericObject或variant。
//没法推断类型--glob是1个全局变量
varglob=42;
functionmyfunc()
{
//没法推断类型--s没有定义因此它被当作全局变量
s="hello";
//可以推断类型
vari=0;
//没法推断类型—q被指派成其他的类型
varq=newDate();
q=3.14159;
}
虽然类型推断是非常好的功能,但是它还是有1定的缺点的。它没法帮助我们捕捉类型不匹配或其他的毛病。为了解决这个题目,Jscript.net提供1种方法明肯定义变量的类型。通过例子,你将很轻易的了解它的使用方法。
//定义数值类型
varmyInt:int=42;
//定义1个函数,返回1个字符串
functionGetName():String
{
//程序行
}
//定义1个带两个参数的函数返回1个逻辑类型
functionCheckNumber(dVal:double):Boolean
{
//functioncode
}
下面给出1个完成的函数,仔细的体会1下。
functiongetConditions(strCity:String):String
{
varnow:Date=newDate();
switch(strCity.toUpperCase())
{
case"LONDON":
if(now.getMonth()<=7||now.getMonth()>=9)
{
return"overcast";
}
else
{
return"partlyovercastandhumid";
}
break;
case"SEATTLE":
if(now.getMonth()==7&&now.getDay()==4)
{
return"torrentialrain";
}
else
{
return"rain";
}
break;
case"LA":
return"smoggy";
break;
case"PHOENIX":
return"damnhot";
break;
default:
return"partlycloudywithachanceofshowers";
}
}
使用Jscript.net,你也能够定义其他.net架构的类型,通过援用命名空间和派生类可以向Jscript.net引进新的数据类型。这样在二者的数据类型中就有可能产生堆叠。参见下表:
Boolean.NETFrameworkBoolean/JScriptboolean
Number.NETFrameworkDouble/JScriptnumber
String.NETFrameworkString/JScriptstring
Int.NETFrameworkInt32
Long.NETFrameworkInt64
Float.NETFrameworkSingle
Double.NETFrameworkDouble
Object.NETFrameworkObject/JScriptObject
DateJScriptDateobject
ArrayJScriptArray
FunctionJScriptFunctionobject
在Jscript中定义类通过类声明,包括方法和对象和var声明。对类的派生通过下面两个程序的对照,你讲清楚地明白。
JScript5.5Code
//Simpleobjectwithnomethods
functionCar(make,color,year)
{
this.make=make;
this.color=color;
this.year=year;
}
functionCar.prototype.GetDescription()
{
returnthis.year+""+this.color+""+this.make;
}
//CreateanduseanewCarobject
varmyCar=newCar("Accord","Maroon",1984);
print(myCar.GetDescription());
JScript.NETCode
//Wrapthefunctioninsideaclassstatement.
classCar
{
varmake:String;
varcolor:String;
varyear:int;
functionCar(make,color,year)
{
this.make=make;
this.color=color;
this.year=year;
}
functionGetDescription()
{
returnthis.year+""+this.color+""+this.make;
}
}
varmyCar=newCar("Accord","Maroon",1984);
print(myCar.GetDescription());
Jscript.net还支持定义private和protectedproperty通过GET和SET进行读写。
以下例:
classPerson
{
privatevarm_sName:String;
privatevarm_iAge:int;
functionPerson(name:String,age:int)
{
this.m_sName=name;
this.m_iAge=age;
}
//Name只读
functiongetName():String
{
returnthis.m_sName;
}
//Age读写但是只能用SET
functiongetAge():int
{
returnthis.m_sAge;
}
functionsetAge(newAge:int)
{
if((newAge>=0)&&(newAge<=110))
this.m_iAge=newAge;
else
thrownewAge+"isnotarealisticage!";
}
}
varfred:Person=newPerson("Fred",25);
print(fred.Name);
print(fred.Age);
//这将产生1个编译毛病,name是只读的。
fred.Name="Paul";
//这个将正常履行
fred.Age=26;
//这将得到1个run-time毛病,值太大了
fred.Age=200;
Jscript.net可以用JScript或任意NET框架语言(如C#,VB7.0)通过增加extends主题辞在类声明以后来继续和扩大现有类。这能力答应Jscript.net非常轻易地利用NET平台的丰富资源。为了说明这些,给出1个程序。这个程序扩大了NET框架的ServiceBase类。
//导进需要的.net命名空间
importSystem;
importSystem.ServiceProcess;
importSystem.Diagnostics;
importSystem.Timers;
classSimpleServiceextendsServiceBase
{
privatevartimer:Timer;
functionSimpleService()
{
CanPauseAndContinue=true;
ServiceName="JScriptService";
timer=newTimer();
timer.Interval=1000;
timer.AddOnTimer(OnTimer);
}
protectedoverridefunctionOnStart(args:String[])
{
EventLog.WriteEntry("JScriptServicestarted");
timer.Enabled=true;
}
protectedoverridefunctionOnStop()
{
EventLog.WriteEntry("JScriptServicestopped");
timer.Enabled=false;
}
protectedoverridefunctionOnPause()
{
EventLog.WriteEntry("JScriptServicepaused");
timer.Enabled=false;
}
protectedoverridefunctionOnContinue()
{
EventLog.WriteEntry("JScriptServicecontinued");
timer.Enabled=true;
}
functionOnTimer(source:Object,e:EventArgs)
{
EventLog.WriteEntry("HelloWorldfromJScript!");
}
}
ServiceBase.Run(newSimpleService());
如何在asp+中使用Jscript.net这才是我们关键的题目。我们将通过1个例子来讲明这个题目。
访问sqlserver数据库
第1个aps+例子是使用Jscript.net和.net的数据访问类来访问sqlserver数据库,
这里我还将使用大家熟习的<%%>格式来编写,访问pubs中的authors表,我知道这很简单但是它可以体现1些新的特性。
<%@ImportNamespace="System.Data"%>
<%@ImportNamespace="System.Data.SQL"%>
<%@language="JScript"%>
<%
//设置数据库连接
varmyConnection:SQLConnection=newSQLConnection("server=scripting;uid=sa;pwd=;database=pubs");
//履行查询
varmyCommand:SQLDataSetCommand=newSQLDataSetCommand("select*fromAuthors",myConnection);
//声明变量
vards:DataSet=newDataSet();
varmyTable:DataTable
varmyColumns:ColumnsCollection
varmyCol:DataColumn
varmyRows:RowsCollection
varmyRow:DataRow
//通过FillDataSet方法获得数据
myCommand.FillDataSet(ds,"Authors");
myTable=ds.Tables[0]
%>
<%=ds.Tables[0].TableName%>
<%
//在表格的最上面输出字段名
myColumns=myTable.Columns
for(myColinmyColumns)
{
%>
<%=myCol.ColumnName%>
<%
}
%>
<%
//输出所有的纪录
myRows=myTable.Rows
for(myRowinmyRows)
{
%>
<%
for(vari:int=0;i
%>
<%=myRow[i]%>
<%
}
%>
<%
}
%>
例子2
<%@WebServiceLanguage="JScript"class="Weather"%>
importSystem
importSystem.Web.Services
classWeather{
WebMethodAttributefunctiongetConditions(strCity:String):String
{
varnow=newDate();
switch(strCity.toUpperCase())
{
case"LONDON":
if(now.getMonth()<=7||now.getMonth()>=9)
{
return"overcast"
}
if
{
return"partlyovercast"
}
break;
case"SEATTLE":
if(now.getMonth()==7&&now.getDay()==4)
{
return"torrentialrain"
}
else
{
return"rain"
}
break;
case"LA":
return"smoggy"
break;
case"PHOENIX":
return"damnhot"
break;
default:
return"partlycloudywithachanceofshowers"
}
}
}
TAG:定义,声明,类型,变量,推断
评论加载中...
|