<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      用JScript.net寫.net應(yīng)用程序

      javascript是一門很神奇的語言,靈活,容易學(xué)習(xí),而且概念很超前。但是現(xiàn)在似乎被釘死在了瀏覽器上,其實(shí)這個才是javascript被人最大的誤解。M$的.net平臺提供了全功能的JScript支持,不過這個JScript還是符合ECMA標(biāo)準(zhǔn)的,跟M$對待其他國際標(biāo)準(zhǔn)的態(tài)度一樣,JScript添加了很多其他能力,好讓人不小心就綁死在了windows上。不過沒關(guān)系,我們這次的主題是寫一個.net程序,綁死了也無所謂。誰讓我是“向M$投降派”呢,其實(shí)我根本上是不跟錢過不去(我們幫主叫做“上官金紅”-----熟悉嗎?)

      安裝了.net SDK就默認(rèn)安裝了JScript的編譯程序jsc.exe了。在正式使用之前,我們要設(shè)置一個集成的編譯環(huán)境,bigtall用UltraEdit,所以在菜單“高級/工具配置”里邊新建了一個命令:菜單項(xiàng)名稱為“JScript.net編譯”;命令行為C:\Windows\Microsoft.NET\Framework\v2.0.50727\jsc.exe /fast- "%f" ;工作目錄為 %p;還要記得把“輸出”設(shè)置為“輸出到列表框”,保存即可。

      有了環(huán)境之后,我們可以開始編寫一些測試代碼了。首先創(chuàng)建一個test.js吧,標(biāo)準(zhǔn)的javascript代碼:

      var arr = ["a","b"];
      var obj = {name:"test", value:3.0};

      print(arr[0]);
      print(arr[1]);
      print(obj.name);
      print(obj.value);

      執(zhí)行以下剛才的菜單命令,編譯成功。在當(dāng)前目錄下出現(xiàn)了一個test.exe,運(yùn)行,正常!

      如果要編一個完整的程序,恐怕一個文件就不夠了,所以我們測試一下多個文件的編譯,創(chuàng)建一個mod.js文件,內(nèi)容如下:

      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);

      不過編譯可是有學(xué)問了,我們要用手工編譯了,進(jìn)入cmd,輸入jsc  /fast- mod.js test.js編譯出一個mod.exe文件來,運(yùn)行,通過!但是如果我們用命令jsc /fast- test.js mod.js編譯,出來的test.exe就無法運(yùn)行,究其原因是找不到mod.js中的東西。這是一個要注意的地方。

      因?yàn)镴Script做了很多擴(kuò)展,我們要測試一下擴(kuò)展命令和非擴(kuò)展之間是否可以互相協(xié)作,因?yàn)槲覀円?net下的程序,免不了要和.net SDK打交道,用擴(kuò)展當(dāng)然必要了。于是創(chuàng)建新文件pkg.js,內(nèi)容如下:

      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,運(yùn)行結(jié)果如下:

      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。保留所有權(quán)利。

      D:\work\testjs.net>mod
      a
      b
      test
      3
      haha
      call haha
      Eiffel Tower
      hello from writeline

      D:\work\testjs.net>

      接下來,我們還要做一個工作。因?yàn)閺膶?shí)際的javascript編程中,我們有幾個不方便的地方,一個是編輯,eclipse下游JsEclipse,但是.net下沒有,好在vs2008出來了,問題不大了;第二就是調(diào)試,出奇的困難,firefox下有插件,很好。ie下也有,但是不太好用,經(jīng)常抓不住斷點(diǎn),但是從vs2005開始也湊胡了,只是大了一點(diǎn)而已。第三個就是js語言本身的問題了,好在有現(xiàn)成的擴(kuò)展庫prototype,其他的幾個庫dojo,ext,jquery也都用過,只有prototype是純面向js語言本身的擴(kuò)展,其他幾個跟瀏覽器綁定太緊密,用不了。所以我們接下來就要編譯prototype 1.5作為我們的擴(kuò)展庫了。

      首先從這里獲取prototype1.5的代碼,用ultraedit裝入,然后運(yùn)行開頭設(shè)置的“JScript.net編譯”命令,出現(xiàn)一堆錯誤。不要緊,我們做如下的兩個工作即可:

      1. 全文、全詞、大小寫敏感查找替換set為_set,get為_get, event為ev
      2. 生成compitable.js文件,內(nèi)容如下:

        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:""
            };

      3. 使用命令行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)。估計(jì)原因可能是JScript編譯器的一個bug,沒能在這個環(huán)境下識別出function其實(shí)就是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());

      重新編譯,運(yùn)行即可。

      有一點(diǎn)小經(jīng)驗(yàn)bigtall要給大家分享:如果程序運(yùn)行有異常,一般都是值為null引起的,JScript的異常報(bào)告不明確。

      另外,prototype中dom相關(guān)的部分,ajax部分的代碼都不能使用,setTimeout,alert等函數(shù)也不能用,除非你擴(kuò)展我的compitable.js。

      基本的JScript.net幫助參考這里,同樣內(nèi)容在VS2005的msdn幫助里邊也有。

      實(shí)際上,要真正用JScript.net來做桌面應(yīng)用,還需要對.net做一個接口層才行,不過bigtall個人認(rèn)為如果按照winform的接口規(guī)范來走,JScript就失去了優(yōu)勢,以js這么靈活,應(yīng)該有一個全新的接口庫。大家可以參考一下Ruby的GUI,Python的GUI庫的做法,有興趣的可以看這個文章

      結(jié)論

      通過使用參數(shù)/fast-,并且替換少許保留字之后,JScript可以編譯大部分的傳統(tǒng)js代碼,并且可以和JScript.net的擴(kuò)展語法同事使用。這就給我們用JScript來編制實(shí)際的應(yīng)用程序建立了基礎(chǔ)。

      結(jié)合目前js領(lǐng)域的語言擴(kuò)展庫(目前只用了prototype),可以給JScript.net編程提供極大的方便性。但是目前JScript.net尚欠缺一個真正適合js特性的GUI庫,XML庫。

      posted on 2007-11-15 21:53  老翅寒暑  閱讀(6850)  評論(20)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 精品国产成人a在线观看| 久久精品免视看国产成人| 国产精品视频第一第二区| 亚洲精品国产中文字幕| 99蜜桃在线观看免费视频网站| 青青草成人免费自拍视频| 免费a级毛片无码av| 墨竹工卡县| 欧美成人精品在线| 女人扒开的小泬高潮喷小 | 免费国精产品wnw2544| 少妇高潮激情一区二区三| 依依成人精品视频在线观看| 亚洲日韩欧洲乱码av夜夜摸| 亚洲午夜av一区二区| 日韩AV无码精品一二三区| 中文字幕亚洲国产精品| 成人免费A级毛片无码网站入口| 久久精品夜色噜噜亚洲av| 亚洲伊人久久精品影院| 成人午夜福利视频一区二区| 精品国产一区二区三区麻豆| 2021国产成人精品久久| 国产精品一区二区三区黄| 国产美女裸身网站免费观看视频| 国产办公室秘书无码精品99| 高清日韩一区二区三区视频| 中文字幕亚洲中文字幕无码码| 美女黄18以下禁止观看| 久久这里只精品国产免费9| 久久国产精品-国产精品| 久久精品波多野结衣| 亚洲午夜理论片在线观看| AV人摸人人人澡人人超碰| 久久96热人妻偷产精品| 2019香蕉在线观看直播视频| 国产嫩草精品网亚洲av| 福利一区二区1000| 精品国产av一区二区三区| 国产av综合影院| 亚洲免费人成在线视频观看|