聊天主題:Web開發中的JavaScript設計藝術
聊天時間:2005年1月27日星期四下午2:00—3:30
聊天嘉賓:Lostinet(戴立堅)、wch3116(萬常華)
詳細聊天實錄:
[劉如鴻]:
大家好,我是《msdn開發精選》的技術主編劉如鴻。首先感謝大家的到來,今天我們邀請了在JavaScript開發中享有盛名的Lostinet和wch3116到場和我們一同探討JavaScript設計中的種種考慮。
[2005-1-27 ]
[劉如鴻]:
以下是他們的個人介紹:
Lostinet(戴立堅)2004年微軟最有價值的專家,擅長於腳本開發和基於ASP.NET企業應用解決方案實現,主要作品爲Rane,CBM,Lostinet.Web控件集,CuteEditor 4,CuteChat等等。可以通過http://blog.joycode.com/lostinet/ 訪問他的個人Blog。現爲無業人士,在深圳學英語和減肥。
[2005-1-27 ]
[劉如鴻]:
wch3116(萬常華) 擅長腳本開發及B/S系統架構設計,JSVM 項目負責人。主要作品,JSVM,XpRPC,WDB。可以通過[email protected]與他聯繫。現供職於中興通訊/IT中心,致力於企業應用平臺技術整合與應用框架設計。
[2005-1-27 ]
[劉如鴻]: 現在我宣佈一下聊天規則
1。聊天2:00正式開始,3:30結束
2. 2:00到2:30以嘉賓的討論爲主
3. 2:30以後可以自由提問,大家如果有問題,可以通過提交給futurelight,他會將問題提交給嘉賓
4。請不要在聊天室討論一些和主題無關的話題
謝謝大家的支持和配合
[2005-1-27 ]
嘉賓[戴立堅]:
大家好..我是戴立堅. 很高興和萬常華來到CSDN上做JS聊天的嘉賓. 很感謝大家來參與這次的討論.
[2005-1-27 ]
嘉賓[萬常華]:
大家好,非常榮幸有這個機會能與大家在一起交流一下
[2005-1-27 ]
[劉如鴻]:
雖然一開始JavaScript只是針對腳本設計的,但是發展到現在,已經“初步”具備了面向對象的功能,兩位嘉賓如何看待JavaScript的面向對象呢?
[2005-1-27 ]
[劉如鴻]:
從我個人的理解,基於JavaScript的面向對象本質上來說可以是Prototype-Based的繼承實現方式,因爲任何的實現嚴格意義來說只是採用了父對象的原型
[2005-1-27 ]
嘉賓[萬常華]:
OO 設計思想是 計算機語言向 現實模型靠攏 的必然發展過程,js作爲一門腳本語言,也要引入這種設計思想,當然,目前因爲語言本身的問題,把js作爲一種面向對象的語言來做程序設計還有一些缺陷
[2005-1-27 ]
嘉賓[戴立堅]:
關於面向對象 , 我覺得現在JS主要作用是操作其他對象. 例如 DHTML 中的window/document/element . 或者是其他環境中的對象 例如用 ActiveXObject 創建出來的對象或Mozilla的XMLHttpRequest . 但是 JS 本身帶的面向對象的功能很弱 . 適合做一些簡單的類庫. 但很難達到大規模的類庫的應用.
[2005-1-27 ]
[劉如鴻]:
那麼我請問,JavaScript在面向對象中還存在哪些缺陷呢?這些的缺陷是否可以通過一些手段去繞過去
[2005-1-27 ]
嘉賓[戴立堅]:
腳本本身的語法功能很有限 . 並沒有 class 這樣的功能. 我比較看好的是 Mozilla 的 __defineGetter__/__defineSetter__ , 與Flash中ActionScript中的addProperty的功能 . 這些功能爲面向對象提供了一定的方便 .
[2005-1-27 ]
嘉賓[萬常華]:
js是一門基於對象的語言,在基於web的js實際開發中,如果引入一些規範,我們基本上可以很少地方需要考慮他與面向對象之間的區別
[2005-1-27 ]
嘉賓[戴立堅]:
當然 , MS的Behavior(HTC)是實現面向對象的很使用的技術 . 這個技術可以定義屬性與事件等等 .
[2005-1-27 ]
[劉如鴻]:
戴立堅,我想下面會有些人不太贊同你的觀點,有人會舉例bindows就是一個很龐大的類庫,萬常華實現的JSVM也是一個比較大的類庫
[2005-1-27 ]
[劉如鴻]:
戴立堅,我想下面會有些人不太贊同你的觀點,有人會舉例bindows就是一個很龐大的類庫,萬常華實現的JSVM也是一個比較大的類庫
[2005-1-27 ]
嘉賓[戴立堅]:
而在面向對象中 ,JS最缺陷的就是無法在語法上直接實現 override(虛擬方法) 的功能. 雖然可以用其他方法來模擬 , 但是寫法的特殊和不直觀,很影響JS做面向對象的應用.
[2005-1-27 ]
嘉賓[戴立堅]:
是的 . 我很欣賞 Bindows 和 JSVM . 這些都做得很好 . 如果JS能在語法上提供一些更直接的支持 , 那麼我覺得它們會發展得更好的.
[2005-1-27 ]
[劉如鴻]:
那麼對於JScript.NET,你們是如何看待呢?作爲.NET環境下的一個半動態語言,除了擁有JavasScript的全部功能之外,還能夠利用.NET Framework,按照微軟的文檔,JScript.NET是第一個實現了ECMA 262 Edition 3的語言,同時也引入了class,package等等關鍵字
[2005-1-27 ]
嘉賓[戴立堅]:
如果 IE 等環境支持JScript.Net就更好啦. 可惜現在IE不支持 < script language=jscript.net >.. 所以JScript.Net目前的應用也只在.Net開發中 . 但是做.Net的開發,有C#和VB.NET這兩個更強大的語言 , JScript.Net 的地位真的不上不下.
[2005-1-27 ]
嘉賓[萬常華]:
js能否成“庫”,主要在於是否有一個良好的代碼組織結構和規範
[2005-1-27 ]
嘉賓[戴立堅]:
js 是否可對遠程URL發送 XMLHttpRequest請求?
可以的. 但是要考慮以下情況: 操作系統是否支持 . 運行JS的環境是否允許你訪問該URL. 一般的應用是網站在客戶端通過XmlHttp/XmlHttpRequest來訪問"本站"的內容 . 這個IE和MOZILLA都支持.
[2005-1-27 ]
嘉賓[萬常華]:
Jscript.Net 由於運行環境的限制,導致他在web端沒有用武之地,我想MS
對此他是有考慮的
[2005-1-27 ]
嘉賓[戴立堅]:
同意萬常華. 我想當網絡速度不在是庫下載速度的障礙時,基於JS的庫會得到大規模的應用.
[2005-1-27 ]
[劉如鴻]:
很多人問我過這樣的問題,JavaScript裏面有真正對象嗎?那麼他是如何實現的,你們的理解呢?所謂繼承呢?是在一個怎樣的角度去說的
[2005-1-27 ]
[劉如鴻]: “初步”的面向對象是不是應該說成基於對象?
是的,基於對象和基於原型的面向對象,這是一個很有意思的東西
[2005-1-27 ]
嘉賓[萬常華]:
通過一些手段,在本地建立一個cache機制,可以一定程度上解決 網絡帶寬帶來的一些瓶頸
[2005-1-27 ]
[劉如鴻]:
就我個人而言,我不是特別贊成太依賴於腳本,如果我們將腳本虛擬機的運行環境擴充而且能夠跨平臺的話,那麼這個時候腳本的優勢纔會更加明顯,而目前,不論IE還是Mozilla,腳本解釋器的功能還是極其有限的,對於簡單的應用,它可以很好的解決,對於複雜的應用,可能好耗費比傳統語言更多的精力才能夠解決。那麼從這個角度來說,我們是不是不要太過度使用腳本
[2005-1-27 ]
嘉賓[戴立堅]: javascript 與 vbscript 的區別
基本上是語法上,提供的內置對象/函數的不同. vbscript支持Class但不支持繼承. vbscript只適合microsoft或兼容的平臺
[2005-1-27 ]
嘉賓[萬常華]:
js 的另外一個應用領域是 hta - Html Appliction 作爲最接近web的一種應用程序,我們如果撇開 跨域完全 及 性能方面的考慮,就開發方式和運行方式而言基本上是一致的。
[2005-1-27 ]
嘉賓[萬常華]: javascript 能不能讀取遠程xml文件的數據
javascript 藉助一控件比如 xmlhttp xmldom 可以實現讀取遠程xml,但這裏有一個跨域安全限制的問題
[2005-1-27 ]
嘉賓[戴立堅]: javascript 能不能讀取遠程xml文件的數據
這個是可以的 . 請參考 Microsoft.XMLHttp 或 Mozilla 的 XMLHttpRequest . 這兩個對象的接口基本一致.
如果是在瀏覽器上應用 , 則通常會被瀏覽器拒絕程序訪問其他網站的數據.
如果是在一些有更高權限的環境 , 如 WScript , 就能訪問其他站點的數據了.
[2005-1-27 ]
[劉如鴻]:
現在可以開始自由提問,請大家講問題提交到futurelight,最好指定哪個嘉賓回答您的問題,謝謝
[2005-1-27 ]
嘉賓[戴立堅]: 非IE瀏覽器下,如何用js讀取遠程URL的內容??
使用 var req=new XMLHttpRequest();
req.open("GET",url,false,null,null);
req.send("");
req.responseXML 就是一個 XmlDocument 對象.
(只適合Mozilla/FireFox或相關核心的瀏覽器. 另外Opera8也支持)
[2005-1-27 ]
嘉賓[萬常華]:
js運行方式導致性能上不及別的語言,但就邏輯描述能力和一些動態特徵,甚至是別的一些語言所不及的
[2005-1-27 ]
[劉如鴻]: 腳本語言的安全性問題?
這問題很有意思,其實也是基於Web應用的最大挑戰,沒有絕對的安全,您可以將一些交互性的邏輯放置在客戶端,但是對於嚴格的商業邏輯判斷還是需要在服務器處理的。
[2005-1-27 ]
嘉賓[戴立堅]: 腳本語言的安全性問題?
其實腳本本沒有什麼安全的問題 . 這些問題都是被它的環境所限制的. 例如瀏覽器一般不給你使用某些對象,不允許訪問本地磁盤,不允許訪問其他站點的資源等等..
[2005-1-27 ]
嘉賓[萬常華]: 請萬老師介紹一下JSVM好嗎
JSVM 本質上是一個javascript 框架,遵循這個框架從事 js 開發,可以實現js code更好地被複用。
[2005-1-27 ]
[劉如鴻]: js讀取遠程URL 是什麼原因遭到拒絕訪問的呢? 是遠程URL的服務器不允許還是本地瀏覽器不允許?
還是安全的原因,從安全的角度考慮,IE是不允許你跨域訪問的
[2005-1-27 ]
嘉賓[戴立堅]: 說點JS的應用層面吧
這個首選是瀏覽器 . 然後就是用JS寫 ASP WScript . 更有些程序會使用MS的Scripting技術來加載腳本來擴充程序的功能. 這個和VBA很像.
[2005-1-27 ]
嘉賓[戴立堅]: 我還想問一下,jscrpit.net將來會有單獨的開發環境出來嗎?
這個不太清楚 . 我想如果MS要支持的話 ,將會在VS.NET中出現. 和C#,VB.NET一樣的.
[2005-1-27 ]
嘉賓[戴立堅]: 可是一般瀏覽器默認是不允許遠程發送 XMLHttpRequest請求的,它會彈出對話框提示是否繼續,或者乾脆說拒絕訪問,如何解決這種問題? 可以讓它直接訪問!比如我有一公用的xml數據要通過幾個服務器來遠程訪問!
主要是考慮隱私的問題. 例如如果別人訪問你的網站,如果你的腳本能訪問銀行網站,那麼你就有機會偷到密碼了 . 所以瀏覽器是不允許你這樣做的.
[2005-1-27 ]
[劉如鴻]: 我還想問一下,jscript.net將來會有單獨的開發環境出來嗎?
我想不會的,微軟通過.NET統一了編程語言,沒有理由還分離出單獨的運行環境,但是我想在Avalon,你是可以使用JScript的,不過這個時候使用C#或者VB.NET這樣的語言可能更加習慣
[2005-1-27 ]
嘉賓[萬常華]: 一個“良好的組織結構和規範”這樣的規範應該從哪些方面考慮的? )
我想可以至少要考慮,代碼文件的組織結構和js code語法域的獨立性。
在JSVM中,採用類似java的包結構的規範,使任意兩個人開發的js code能放在一起運行,而且他們的語法域相互對立,這樣運行起來不會導致衝突。
[2005-1-27 ]
嘉賓[戴立堅]: 可不可以簡單介紹一下 WScript 這個高權限的環境
如果你使用的是 Windows , 建立一個 test.js , 然後裏面打 WScript.Echo("Hello World"); , 那麼這就是一個 WScript 程序了. 雙擊它就能看到程序運行.(加入*.js文件的默認打開方式不變的話)
WScript與IE中運行腳本不同的地方是,你使用的是WScript對象, 而不是window/document了.
另外你的權限是用戶權限 , 可以訪問很多資源的.
[2005-1-27 ]
嘉賓[戴立堅]: 我還想問個問題,flash的腳本將來在純.net平臺上會有影響嗎
如果你的腳本是寫在Flash裏的,那麼這個和.net沒有什麼直接的關係.
[2005-1-27 ]
嘉賓[戴立堅]: 腳本的藝術在於它的精巧和靈活,濫用當然會有害無利。但是使用的藝術,嘉賓是不是能分享一二
這個和經驗有比較大的關係.
講到藝術,就有點不實用的感覺.所以我平時開發是以效率爲主的.
但如果我要做給別人重複使用的東西時,就要考慮到是否方便地讓別人使用這個角度了.
你可以到http://www.lostinet.com/files/裏下載我的ChatSolution,裏面有一個rane.js文件.裏面體現了我對藝術的看法.(藝術的代碼總是有很多好處,而缺點就是難懂)
[2005-1-27 ]
嘉賓[戴立堅]: 迷失老大, 問你一句: abc = {} 這種結構叫什麼東西呀.
{} 是對象的表達式. {} 是最簡單的對象 , 等於 new Object();
[2005-1-27 ]
嘉賓[萬常華]: 目前的jsvm能夠實現類似java裏面“接口”這樣的功能嗎? )
javascript 是一門動態語言,接口在這裏意義不是非常大,JSVM 目前面臨的瓶頸是性能方面,在對對象原形的判斷上,jsvm2.x有了更多的考量
[2005-1-27 ]
嘉賓[戴立堅]: 請問 var a = {"aa": "aa", "bb":"bb"} 這種寫法叫什麼名
這個相當於
var a=new Object();
a.aa="aa";
a.bb="bb";
如果你不想分開那麼多行來寫,
{property1:value1,property2:value2} 這樣的寫法就直接很多.
[2005-1-27 ]
嘉賓[戴立堅]: 我平時在用JS時的一個擔心就是JS在瀏覽器的兼容性問題,比如一個瀏覽器的不同版本,IE,Firefox.....,不知嘉賓對此有何建議?你們在實施中是如何最大保證兼容性的??
JS本身在IE與其他瀏覽器是一致的.不同的地方是環境的不同. 在瀏覽器上就是DHTML的規範不同.
我一般的做法是儘量用規範的寫.例如儘量用element. setAttribute/getAttribute . 如果遇到不同的地方,就用if(isie){...}else{...} 的做法. 對於一些"downlevel"的瀏覽器,那就只好說"不支持"了.
csdn上的javascript版上有關於這個的細節的討論.
[2005-1-27 ]
嘉賓[萬常華]: JavaScript在長角里的展望?有前途嗎???? )
我們不能指望一門計算機語言有太長的生命週期,重要的編程思想。
[2005-1-27 ]
嘉賓[戴立堅]: 在非IE瀏覽器裏比如說 firefox 裏如何實現 XmlDom
這個是用 document.implementation.createDocument("", " null); 來得到一個XmlDocument
[2005-1-27 ]
嘉賓[戴立堅]: 問一句老大, 在 iframe 裏使用 top.screenTop 取到的值不準確問題有沒有解決呀. 而取 parent.screenTop 卻是正確的
這個我沒有測試過. 如果你的經驗是正確的,那麼這是一個IE的BUG了.
但你可以考慮使用top.screenTop,然後計算各frame與window.top的height來計算出準確的值.
[2005-1-27 ]
嘉賓[萬常華]: 問一句老大, 在 iframe 裏使用 top.screenTop 取到的值不準確問題有沒有解決呀. 而取 parent.screenTop 卻是正確的
你這個問題不在javascript範疇內,屬於dhtml的內容。還有很多諸如此類的問題,我建議去找 Web WorkShop 參考看看。(INET.CHM)
[2005-1-27 ]
[劉如鴻]: 除了smartclient ,有沒有.NET後臺的RIA應用?
RIA準確的說是具備網絡訪問能力的“終端”的表現層架構,請注意我提到了“終端”和表現層這兩個概念,因此在後臺去說RIA是沒有意義的,關於RIA和Smart Client,大家可以看我的blog:http://blog.csdn.net/liuruhong/archive/
[2005-1-27 ]
[劉如鴻]: 動態腳本語言在RIA上應用好像很多,嘉賓看好哪個?
比較典型的可能是Bindows了,我記得我寫過一個評論,就我個人,不是那麼看好,http://blog.csdn.net/liuruhong/archive/
[2005-1-27 ]
嘉賓[戴立堅]: 現在flash的腳本越來越接近jscript了,我還想問個問題,flash的腳本將來在純.net平臺上會有影響嗎
不是很明白 . 你可以考慮 flash中的js 與dotnet的js 的"應用" 是兩回事就OK了. 需要flash就寫flash的腳本 ,需要dotnet就寫dotnet的腳本. 除非flash打算支持dotnet,否則這沒有關係的.
[2005-1-27 ]
嘉賓[萬常華]: 動態腳本語言在RIA上應用好像很多,嘉賓看好哪個?
RIA的應用接下來會越來越多,我們目前需要的是制定一個企業標準來規範這一塊的開發。還必須有一個語法層面上與業務無關的框架
[2005-1-27 ]
[劉如鴻]:
大家有什麼問題可以提交給futruelight,他會負責提交給嘉賓
[2005-1-27 ]
嘉賓[戴立堅]: 在JS裏對長度超過千的數組遍歷有何好的建議?? 甚至數組長度更大的
如果真的有那樣的數組,那麼當然寫法上要注意點.
例如最好是 var arr=obj1.Property1.TheArrays; var len=arr.lengh; for(var i=0;i<LEN;I++)
{
var item=arr[i];
//...
}
如果寫成
for(var i=0;i<OBJ1.PROPERTY1.THEARRAYS.LENGTH;I++)
{
if(obj1.Property1.TheArrays[i]!=null)
{
res+=obj1.Property1.TheArrays[i]
}
}
這樣的寫法性能就很低了。
[2005-1-27 ]
嘉賓[萬常華]: 在JS裏對長度超過千的數組遍歷有何好的建議?? 甚至數組長度更大的
如果數組過大,我考慮是不是放棄用數組,例如用 Scripting.Dictionary 來實現查找某個對象 的方式來解決
[2005-1-27 ]
嘉賓[戴立堅]: 其實我的意思是flash的腳本不改變的話在新的.net平臺js上會有影響嗎?
同上.
[2005-1-27 ]
[劉如鴻]:
我想問兩位嘉賓,是否考慮過腳本方面的垃圾回收,就我的瞭解,JScript目前做的不是特別好?但是在應對大對象的情況下,應該怎麼考慮?
[2005-1-27 ]
嘉賓[戴立堅]: 有個問題不知當問不當問 window.open 的返回值 和彈出的窗口的window不相等是爲什麼
這個沒有遇到過,也無法分析原因 。 也許在社區裏提問會有其他人有那樣的經驗。
[2005-1-27 ]
嘉賓[萬常華]: 有個問題不知當問不當問 window.open 的返回值 和彈出的窗口的window不相等是爲什麼
在我看來,他們是相等的,不知你當時的測試場景是什麼情況。
[2005-1-27 ]
嘉賓[戴立堅]: 腳本方面的垃圾回收
MICROSOFT的這個的確做得不好。主要問題是因爲JScript與DHTML都是基於COM的。COM在這個的處理上有缺陷。
我通常遇到的問題是HTML ELEMENT事件的關聯,如果沒有釋放,那麼內存就不會釋放。如果主動detachEvent,那樣就沒有問題了。
[2005-1-27 ]
嘉賓[萬常華]: 請問現在有很多軟件,都想全部使用javascript實現,你認爲現在到了這個時候了嗎!現在的軟件業可以都拖到web上來嗎?
不是任何應用都適合搬到web上來的。javascript 的功能依賴於 dom 庫。
[2005-1-27 ]
[劉如鴻]: 問一句, JS還能活多久, 在MS的 smart client 出來之後JS是否還有位置?
任何一個語言的存在都是有其意義的,是因爲需要所以語言會產生和流行,Smart Client只是一個理念,表現層架構的一種提法,他們之間本身並沒有太多的衝突,我想他能夠活很長時間
[2005-1-27 ]
嘉賓[戴立堅]: 能請嘉賓朋友談一下JavaScript中所謂的“藝術”嗎?
我眼中的藝術分:
1。用很短的代碼實現較多的功能。這樣的代碼往往都有“藝術”氣息。
2。寫出來的代碼容易被使用,那樣需要在代碼上下很大的功夫,這也很“藝術”
所以我的觀點時,如果代碼經過不斷地改進,達到越來越好,那麼這個就是“藝術”了。 例如JSVM,Bindows就是藝術
[2005-1-27 ]
嘉賓[萬常華]: 能請嘉賓朋友談一下JavaScript中所謂的“藝術”嗎?
我認爲,如果在js的設計思想符合美學特徵,那就是一種藝術了!
[2005-1-27 ]
嘉賓[戴立堅]: jscript.net微軟會給它裝混亂器嗎?
JScript.Net會編譯成 DotNet 的 dll 的。 所以使用 DotNet 的混淆器就OK了。
[2005-1-27 ]
[劉如鴻]: jscript.net微軟會給它裝混亂器嗎?
JScript.NET目前是編譯性語言,和C#,VB.NET同等的,所以所謂的混淆是沒有意義的e
[2005-1-27 ]
嘉賓[戴立堅]: 所謂“腳本”都是在客戶端運行的代碼,那麼對於一些關鍵性的腳本代碼,如何保證其不備瀏覽者看到呢?
很多服務器都應用腳本技術。例如ASP由VBScript/JScript來寫。
如果要運行在客戶端,那麼做法可以是:
1。儘量不要讓客戶端的人得到JS的代碼。例如屏蔽右鍵是基本的,有很多人想出各種方法的目的是爲了這個。
2。是保護JS的思想,儘量另代碼變得難讀。這樣即使得到代碼,也很難被閱讀和修改。
[2005-1-27 ]
嘉賓[萬常華]: 所謂“腳本”都是在客戶端運行的代碼,那麼對於一些關鍵性的腳本代碼,如何保證其不備瀏覽者看到呢?
這是 javascript 中目前“難以”解決的問題。當初設計者包括現在的解釋器提供商都沒有考慮這個問題,這是把js作爲一個腳本語言的定位決定的
[2005-1-27 ]
嘉賓[劉如鴻]: jscript.net微軟會給它裝混亂器嗎?
因爲微軟提供的混淆器或者說編碼器是在源代碼層次上考慮的,如果已經編譯成MSIL,那麼之後的混淆是其他工具去處理的
[2005-1-27 ]
[劉如鴻]: JScript.Net和現在的JScript有什麼不同???
最簡單的解釋,JScript.NET必須在.NET上運行,而JScript可以在瀏覽器運行
[2005-1-27 ]
嘉賓[戴立堅]: js 是否可以擺脫瀏覽器的框框? 我知道用 window.createPopup();可以模擬一下,但是如果它的父頁面如果關閉, 它也會跟着關閉? 有沒有什麼更好的辦法呢?
如果腳本是運行在瀏覽器中的,那麼就要受瀏覽器的限制。
這個是具體瀏覽器的開發問題了。如果技術上無法實現,那就看出瀏覽器的公司願意不願意提供這個功能了。
[2005-1-27 ]
嘉賓[萬常華]: js提供錯誤處理功能了嗎?就像java中的exception類
提供了,但功能比較弱,我們做一些封裝,可以大致上實現java異常的處理機制。
[2005-1-27 ]
嘉賓[戴立堅]: 請問現在有很多軟件,都想全部使用javascript實現,你認爲現在到了這個時候了嗎!現在的軟件業可以都拖到web上來嗎?
我認爲現在是屬於研發和初試階段。
這個要看瀏覽器的生命力了。如果以後有東西會取代瀏覽器,那麼基於瀏覽器的JS應用也會慢慢滅亡。
但是現在看來程序越來越基於瀏覽器了。所以我對這個方向很看好的。
但是以後也有可能有更多的編程方式。例如IE能HOST DotNet的程序,如果這個得到大的發展,那麼腳本應用會受打擊。
[2005-1-27 ]
[劉如鴻]: 請問現在有很多軟件,都想全部使用javascript實現,你認爲現在到了這個時候了嗎!現在的軟件業可以都拖到web上來嗎?
everything in web是一件很愚蠢的事情,我想任何平臺都有自己擅長的問題域,不然就沒有存在的價值,有些應用使用Web是合適的,有些應用並不是合適,所以現在有人提出了“The Return of Rich Client”的論調,某種角度來說,也就是對於目前Web過熱的反思
[2005-1-27 ]
嘉賓[萬常華]: 我想知道javascript到底可以幹什麼 或者說它到底可以發展到什麼地步
javascript 目前主要是一門控制語言,沒有基本的IO操作定義,除了本身的計算功能以外,其他的都要藉助於容器中提供的控件來實現。
[2005-1-27 ]
嘉賓[戴立堅]: JavaScript有沒有好一點的調試器,我每次都是使用alert()的方法來調試的!
可以用vs.net來調試js。
不過我自己也是經常用alert。
另外攔截window.onerror也是好方案。
在IE中。能夠得到 window.onerror.caller 的。這樣能夠得到一個JS的StackTrace(調用的函數順序表),這對調試很有幫助。
[2005-1-27 ]
[劉如鴻]: 目前國內有沒有像Bindows這樣規模的JS開源項目,想了解一下
王常華的JSVM就是一個這樣的框架,你可以在www.51js.com上得到更多的信息
[2005-1-27 ]
嘉賓[戴立堅]: 請推薦幾個javascript 的調試工具,謝謝
首推選 vs.net 。 在vs.net裏的調試裏的關聯進程,選上Script就OK了。
[2005-1-27 ]
嘉賓[萬常華]: 目前國內有沒有像Bindows這樣規模的JS開源項目,想了解一下
據我所知,類似bindows關注於web UI 方面的項目國內就有幾個,但目前沒有開源。
[2005-1-27 ]
[劉如鴻]:
大家有問題儘快提交給futurelight,聊天活動剩下10分鐘結束
[2005-1-27 ]
嘉賓[戴立堅]: 問一句, 如何在IE裏也實現 watch() ? watch在NS裏是被支持的
我沒有接觸過 NS 中的 watch() 。 不如說說 watch 是做什麼的?然後看看在IE中怎樣實現同樣的功能?
[2005-1-27 ]
嘉賓[萬常華]: 一個“良好的組織結構和規範”這樣的規範應該從哪些方面考慮的? )
前面已經回答
[2005-1-27 ]
嘉賓[戴立堅]: 剛纔玩WALLOP突然想起一個問題來~~跟梅花雪的問題類似。FLEX這樣的技術出現會對JS產生什麼樣的影響。
就好像飯與麪包的感覺。
如果某一天大家都認爲麪包好吃了,那麼就沒有人吃飯了。
所以飯和麪包都要努力呵呵。
FLEX相當於新的技術和應用。但是具體能不能代替JS的應用,具體是看他們的優點缺點和開發人員的選擇了。
[2005-1-27 ]
嘉賓[戴立堅]: 能不能說明一下如何攔截window.onerror,這個方法沒有用過!
例如 window.οnerrοr=function(msg,file,line){ alert(msg); return true ;}
[2005-1-27 ]
嘉賓[戴立堅]: 請問:爲什麼沒有組織,專門做一些控件!,來統一各瀏覽器的差距!
其實是有一些這樣的代碼的。
例如很多人使用 HTMLElement.prototype.__defineGetter__("outerHTML",..)的方法來統一這些應用。
而Bindows在在另外的模式上去屏蔽瀏覽器的細節。
不過這是艱鉅的工作,還要看各瀏覽器的製造商的臉色。。
[2005-1-27 ]
嘉賓[萬常華]: 能不能說明一下如何攔截window.onerror,這個方法沒有用過!
爲什麼要攔截呢? 既然有異常,我們或者處理,或者向上層容器拋。
我主張js 開發中應多用
try{
} catch(){}
如果非要忽略,可以通過 window.onerror = function(){return false}
來實現
[2005-1-27 ]
嘉賓[戴立堅]: 我覺得對於不同瀏覽器還是針對每個瀏覽器作一套方案的比較好,而不是寫很長很長的腳本去適應他們
那樣也有缺點的。我曾經試過這樣做。 但是當需要修改代碼時,兩邊同時改,同時測試,所費的時間更多。
[2005-1-27 ]
嘉賓[萬常華]: 請問腳本會不會,被各種組織的框架給擠掉!
腳本自己也可以有框架啊
[2005-1-27 ]
嘉賓[萬常華]: 請問在JS裏面能否拋出一個自定義的錯誤,就像VBS裏面的Err.Raise一樣?
可以 throw new Error(errNum,errDescription);
[2005-1-27 ]
嘉賓[劉如鴻]: HTC是否只有IE支持?
是的,HTC是IE自己的擴展,Mozilla也有類似的東西,就是XUL
[2005-1-27 ]
[劉如鴻]: 使用javascript編寫遊戲,是否有前途?
有人這麼做了,有沒有前途我不敢說
[2005-1-27 ]
嘉賓[戴立堅]: 使用javascript編寫遊戲,是否有前途?
我覺得,如果沒有人與你競爭,那就是有前途的。
否則用JS寫大型的程序會很費時間。
[2005-1-27 ]
嘉賓[戴立堅]: 即使你寫兼容的腳本,也是一樣要改兩個地方,只是要改的地方少一些:)
是的。但是這樣會不容易出錯誤。
我以前經常犯的錯誤是,把代碼從一邊複製到另外一邊,總是忘記修改一些細節。
[2005-1-27 ]
嘉賓[萬常華]: 不再try {}catch()塊裏面 throw語句有效嘛?
有效,如果執行域中沒有catch的話將被拋至頂容器,即 window 對象。
[2005-1-27 ]
嘉賓[劉如鴻]:
感謝大家的積極參與,聊天活動到此結束,如果大家有任何問題,可以通過Email和我們的嘉賓聯繫,他們的聯繫方式可以在個人介紹中找
[2005-1-27 ]
[劉如鴻]:
《msdn開發精選》將一如既往地爲您呈現精彩的技術聊天,如果大家對於雜誌和我們的活動有什麼意見和建議,歡迎和我聯繫,我的email:[email protected],再一次謝謝大家的參與
[2005-1-27 ]