Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14406511
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 14:21:15

下载本文示例代码

javascript是一门很神奇的语言,灵活,容易学习,而且概念很超前。但是现在似乎被钉死在了浏览器上,其实这个才是javascript被人最大的误解。MS的.net平台提供了全功能的JScript支持,不过这个JScript还是符合ECMA标准的,跟M$对待其他国际标准的态度一样,JScript添加了很多其他能力,好让人不小心就绑死在了windows上。不过没关系,我们这次的主题是写一个.net程序,绑死了也无所谓。谁让我是“向MS投降派”呢,其实我根本上是不跟钱过不去。

  安装了.net SDK就默认安装了JScript的编译程序jsc.exe了。在正式使用之前,我们要设置一个集成的编译环境,bigtall用UltraEdit,所以在菜单“高级/工具配置”里边新建了一个命令:菜单项名称为“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:""
  };

javascript是一门很神奇的语言,灵活,容易学习,而且概念很超前。但是现在似乎被钉死在了浏览器上,其实这个才是javascript被人最大的误解。MS的.net平台提供了全功能的JScript支持,不过这个JScript还是符合ECMA标准的,跟M$对待其他国际标准的态度一样,JScript添加了很多其他能力,好让人不小心就绑死在了windows上。不过没关系,我们这次的主题是写一个.net程序,绑死了也无所谓。谁让我是“向MS投降派”呢,其实我根本上是不跟钱过不去。

  安装了.net SDK就默认安装了JScript的编译程序jsc.exe了。在正式使用之前,我们要设置一个集成的编译环境,bigtall用UltraEdit,所以在菜单“高级/工具配置”里边新建了一个命令:菜单项名称为“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:""
  };

下载本文示例代码


用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序用JScript.net写.net应用程序
阅读(179) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~