用JScript.net写.net应用程序
日期:2007年11月19日 作者: 查看:[大字体 中字体 小字体]-
javascript是一门很神奇的语言,灵活,容易学习,而且概念很超前。但是现在似乎被钉死在了浏览器上,其实这个才是javascript被人最大的误解。MS的.net平台提供了全功能的JScript支持,不过这个JScript还是符合ECMA标准的,跟M$对待其他国际标准的态度一样,JScript添加了很多其他能力,好让人不小心就绑死在了windows上。我们这次的主题是写一个.net程序,绑死了也无所谓。
安装了.net SDK就默认安装了JScript的编译程序jsc.exe了。在正式使用之前,我们要设置一个集成的编译环境,在菜单“高级/工具配置”里边新建了一个命令:菜单项名称为“JScript.net编译”;命令行为C:\Windows\Microsoft.NET\Framework\v2.0.50727\jsc.exe /fast- "%f" ;工作目录为 %p;还要记得把“输出”设置为“输出到列表框”,保存即可。
有了环境之后,我们可以开始编写一些测试代码了。首先创建一个test.js吧,标准的javascript代码:以下是引用片段:
var arr = ["a","b"];
var obj = {name:"test", value:3.0};
print(arr[0]);
print(arr[1]);
print(obj.name);
print(obj.value);执行以下刚才的菜单命令,编译成功。在当前目录下出现了一个test.exe,运行,正常!
如果要编一个完整的程序,恐怕一个文件就不够了,所以我们测试一下多个文件的编译,创建一个mod.js文件,内容如下:
以下是引用片段:
function hello()
{
this.name = "haha";
}
function haha()
{
print("call haha");
}然后我们修改test.js如下:
以下是引用片段:
var arr = ["a","b"];
var obj = {name:"test", value:3.0};
print(arr[0]);
print(arr[1]);
print(obj.name);
print(obj.value);
import mod;
var t = new hello();
print(t.name);不过编译可是有学问了,我们要用手工编译了,进入cmd,输入jsc /fast- mod.js test.js编译出一个mod.exe文件来,运行,通过!但是如果我们用命令jsc /fast- test.js mod.js编译,出来的test.exe就无法运行,究其原因是找不到mod.js中的东西。这是一个要注意的地方。
因为JScript做了很多扩展,我们要测试一下扩展命令和非扩展之间是否可以互相协作,因为我们要编.net下的程序,免不了要和.net SDK打交道,用扩展当然必要了。于是创建新文件pkg.js,内容如下:
以下是引用片段:
import System;
package France.Paris {
public class Landmark {
static var Tower : String = "Eiffel Tower";
function p()
{
System.Console.WriteLine({t:"hello from writeline"}.t);
}
}
};
然后我们把test.js修改如下:以下是引用片段:
var arr = ["a","b"];
var obj = {name:"test", value:3.0};
print(arr[0]);
print(arr[1]);
print(obj.name);
print(obj.value);
var t = new hello();
print(t.name);
haha();
print(France.Paris.Landmark.Tower);
import France.Paris;
new Landmark().p();使用命令行jsc /fast- mod.js pkg.js test.js编译出mod.exe,运行结果如下:
以下是引用片段:
D:\work\testjs.net>jsc /fast- mod.js pkg.js test.js
Microsoft (R) JScript Compiler version 8.00.50727
for Microsoft (R) .NET Framework version 2.0.50727
Copyright (C) Microsoft Corporation 1996-2005。保留所有权利。
D:\work\testjs.net>mod
a
b
test
3
haha
call haha
Eiffel Tower
hello from writeline
D:\work\testjs.net>接下来,我们还要做一个工作。因为从实际的javascript编程中,我们有几个不方便的地方,一个是编辑,eclipse下游JsEclipse,但是.net下没有,好在vs2008出来了,问题不大了;第二就是调试,出奇的困难,firefox下有插件,很好。ie下也有,但是不太好用,经常抓不住断点,但是从vs2005开始也凑胡了,只是大了一点而已。第三个就是js语言本身的问题了,好在有现成的扩展库prototype,其他的几个库dojo,ext,jquery也都用过,只有prototype是纯面向js语言本身的扩展,其他几个跟浏览器绑定太紧密,用不了。所以我们接下来就要编译prototype 1.5作为我们的扩展库了。
首先从这里获取prototype1.5的代码,用ultraedit装入,然后运行开头设置的“JScript.net编译”命令,出现一堆错误。不要紧,我们做如下的两个工作即可:
全文、全词、大小写敏感查找替换set为_set,get为_get, event为ev
生成compitable.js文件,内容如下:以下是引用片段:
function fn(func):Function{return func;}
var document = {
getElementById: function(){ return null;},
createElement: function(){return {appendChild:function(){}};},
createTextNode: function(){return {};},
getElementsByTagName: function(){ return []; },
addEventListener:function(){},
write:function(){},
all: [],
body: {},
documentElement: {}
};
var window = {
scrollTo:function(){},
setTimeout: function(){},
attachEvent:function(){},
clearInterval:function(){},
setInterval:function(){},
location:{href:""},
pageXOffset:0,
pageYOffset:0
};
var navigator = {
userAgent: "",
appVersion:""
};
使用命令行jsc /debug /fast- mod.js pkg.js compitable.js prototype.1.5.js test.js编译,会有一堆警告和6个错误,都是在prototype中的类似function() { this.respondToReadyState(1) }.bind(this)的错误,把他们修改成fn(function() { this.respondToReadyState(1) }).bind(this)。估计原因可能是JScript编译器的一个bug,没能在这个环境下识别出function其实就是Function类型。
如果使用的是最新的prototype1.6,除了上述几步外,还要大小写敏感替换this.Element为Element,把1555行var element = this.Element修改为var element = typeof Element == "undefined" ? {} : Element;把3845行wrapper.handler = handler;替换为fn(wrapper).handler = handler;即可。
接下来我们修改test.js文件,如下:
以下是引用片段:
var arr = ["a","b"];
var obj = {name:"test", value:3.0};
print(arr[0]);
print(arr[1]);
print(obj.name);
print(obj.value);
var t = new hello();
print(t.name);
haha();
print(France.Paris.Landmark.Tower);
import France.Paris;
new Landmark().p();
var instance = {
funca: function(){return "funca";},
funcb: function(){return "funcb";}
};
Object.extend(instance, {
funcb: function(){return "override funcb";},
funcExt: function() { return "funcExt";}
});
print(instance.funca());
print(instance.funcb());
print(instance.funcExt());重新编译,运行即可。
如果程序运行有异常,一般都是值为null引起的,JScript的异常报告不明确。
另外,prototype中dom相关的部分,ajax部分的代码都不能使用,setTimeout,alert等函数也不能用。结论
通过使用参数/fast-,并且替换少许保留字之后,JScript可以编译大部分的传统js代码。这就给我们用JScript来编制实际的应用程序建立了基础。结合目前js领域的语言扩展库(目前只用了prototype),可以给JScript.net编程提供极大的方便性。但是目前JScript.net尚欠缺一个真正适合js特性的GUI库,XML库。
(出处:急速软件下载学院)
-
- 用JScript.net写.net应用程序 相关文章:
- ·Windows Vista停止报告程序问题的技巧方法
- ·下载:圣诞节3D屏幕保护程序
- ·从与客户沟通谈程序员的内在职业素养
- ·适合做网站优化的blog程序推荐
- ·Javascript代码直接调用计算机中的程序
- ·OS X可将支持Windows应用程序?
- ·企业选择反间谍软件程序10个要点
- ·10秒钟自制出小程序 与任意QQ号聊天
- ·用JScript.net写.net应用程序
- ·用C#实现启动另一程序的方法
- 用JScript.net写.net应用程序 相关软件
- ·《QQ游戏2007》beta1安装程序
- ·潘多拉神奇电池记忆棒制作必要程序
- ·ado程序员参考
- ·vb6程序员指南
- ·快易通Java程序设计
- ·李维的新书《Delphi 7高效数据库程序设计》
- ·使用WAS对Web应用程序进行负载测试
- ·C# 程序员介绍(英文版)
- ·挑战ASP.net程序设计
- ·资产评估学课件第三章资产评估程序
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·如何实现一个表格表头不动tbody区域用滚动条可以滚动
- ·Js之软键盘实现(源码)
- ·javascript实现datagrid客户端checkbox列的全选,反选
- ·用window.location.href实现刷新另个框架页面
- ·用层模拟下拉列表框
- ·判断输入框不为空
- ·用JavaScript刷新框架子页面的方法
- ·JavaScript 经典代码大全
- ·禁用浏览器的后退按钮
- ·Javascript模拟的DOS窗口
- ·获取cpu序列号,硬盘ID,网卡MAC地址
- ·JavaScript教程:框架的概念及如何访问
- ·学习JavaScript里面的变量的应用
- ·Javascript强制设为首页的网页代码
- ·汇总:一些不错的使用频率比较高的JS函数
- ·网页两侧浮动广告代码
- ·一个兼容IE、Firefox和Opera浏览器的英文日历脚本
- ·漂浮广告代码完全解析
- ·javascript规定最多输入的字符串长度
- ·javascript的键盘控制事件
特别推荐
- ·网页制作Javascript经典小技巧总结
- ·JavaScript的9个陷阱及评点
- ·简单介绍用JSP来实现文件下载功能的几种方式
- ·网页播放器实现全屏的方法总结
- ·菜鸟学习javascript实例教程
- ·JavaScript 经典代码大全
- ·汇总:一些不错的使用频率比较高的JS函数
- ·Javascript模拟的DOS窗口
- ·Javascript在IE和FireFox中的不同表现
- ·JavaScript仿Windows关机效果
- ·仿windows选项卡效果拾零
- ·JavaScript经典效果集锦
- ·jscript/javascript条件编译
- ·Js之软键盘实现(源码)
- ·innerHTML在Firefox和Opera下的执行特例
- ·弹出窗口window.open()的参数列表
- ·javascript gb2312转utf-8
- ·JavaScript方法和技巧大全
- ·js事件列表
- ·网页屏蔽(左右键,代码等)的非JS方法
