当前位置:中国站长下载文章中心网页编程.NET编程 → 使用JScript.NET创建asp.net页面

使用JScript.NET创建asp.net页面

减小字体 增大字体 作者:编辑整理  来源:互联网  发布时间:2008-9-15 22:31:29

大家一定习惯于使用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的升级版,而不是一门新的语言。
Jscript.net最新的特性是Jscript.net是真正的编译语言。这使它完全可以与vb.net和C#相媲美。从语法方面,Jscript.net改善了变量类型的定义,不但支持明确的变量类型定义,还支持模糊的变量类型定义。模糊定义是一项激动人心的技术,它可以分析你脚本中使用的变量,并且推断出变量的类型。这就意味着你可以使用未定义的变量并以更快的速度执行。
请参照下面的例子:
functiontest()
{
for(varx=0;x<100;x++)
{
print(x);
}
}
当Jscript.net编译这个程序的时候,它分析变量X的用途并确定变量X只用做数值型,结果变量被安全的定义为数值型。技术进步在于把变量定义为数值型要明显优于把变量定义为genericObject或variant。
为了实现Jscript.net的推断变量类型的功能,你需要遵守以下几条规则!
一.永远声明你的局部变量。这看起来像是显而易见的,但是这是非常重要的,Jscript.net只能推断你的局部变量,而不是全局变量。如果你没有声明它,直接使用,它就将成为全局变量,将不能被优化。
二.仅使用一种数据类型,如果你声明一个数值型变量,却用来储存字符型的数据,Jscript将把该变量定义为genericObject或variant。
//无法推断类型--glob是一个全局变量
varglob=42;
functionmyfunc()
{
//无法推断类型--s没有定义因此它被当作全局变量
s="hello";
//可以推断类型
vari=0;
//无法推断类型—q被指派成其他的类型
varq=newDate();
q=3.14159;
}
尽管类型推断是非常好的功能,但是它还是有一定的缺点的。它无法帮助我们捕获类型不匹配或其他的错误。为了解决这个问题,Jscript.net提供一种方法明确定义变量的类型。通过例子,你将很容易的了解它的使用方法。
//定义数值类型
varmyInt:int=42;
//定义一个函数,返回一个字符串
functionGetName():String
{
//程序行
}
//定义一个带两个参数的函数返回一个逻辑类型
functionCheckNumber(dVal:double):Boolean
{
//functioncode
}
下面给出一个完成的函数,仔细的体会一下。
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);
//这将产生一个编译错误,name是只读的。
fred.Name="Paul";
//这个将正常执行
fred.Age=26;
//这将得到一个run-time错误,值太大了
fred.Age=200;
Jscript.net可以用JScript或任意NET框架语言(如C#,VB7.0)通过增加extends主题词在类声明以后来继承和扩展现有类。这能力允许Jscript.net非常容易地利用NET平台的丰厚资源。为了说明这些,给出一个程序。这个程序扩展了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()

[1] [2]  下一页