聊天主题:Web开发中的JavaScript设计艺术
聊天时间:2005年1月27日星期四下午2:00—3:30<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
聊天嘉宾:Lostinet(戴立坚)、wch3116(万常华)
详细聊天实录:
[刘如鸿]:
大家好,我是《msdn开发精选》的技术主编刘如鸿。首先感谢大家的到来,今天我们邀请了在JavaScript开发中享有盛名的Lostinet和wch3116到场和我们一同探讨JavaScript设计中的种种考虑。
[2005-1-27 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><time hour="13" minute="54"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">13:54:00</span></time>]
[刘如鸿]:
以下是他们的个人介绍:
Lostinet(戴立坚)2004年微软最有价值的专家,擅长于脚本开发和基于ASP.NET企业应用解决方案实现,主要作品为Rane,CBM,Lostinet.Web控件集,CuteEditor 4,CuteChat等等。可以通过http://blog.joycode.com/lostinet/ 访问他的个人Blog。现为无业人士,在深圳学英语和减肥。
[2005-1-27 <time hour="13" minute="55"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">13:55:00</span></time>]
[刘如鸿]:
wch3116(万常华) 擅长脚本开发及B/S系统架构设计,JSVM 项目负责人。主要作品,JSVM,XpRPC,WDB。可以通过[email protected]与他联系。现供职于中兴通讯/IT中心,致力于企业应用平台技术整合与应用框架设计。
[2005-1-27 <time hour="13" minute="56"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">13:56:00</span></time>]
[刘如鸿]: 现在我宣布一下聊天规则
1。聊天2:00正式开始,3:30结束
2. 2:00到2:30以嘉宾的讨论为主
3. 2:30以后可以自由提问,大家如果有问题,可以通过提交给futurelight,他会将问题提交给嘉宾
4。请不要在聊天室讨论一些和主题无关的话题
谢谢大家的支持和配合
[2005-1-27 <time hour="13" minute="57"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">13:57:00</span></time>]
嘉宾[戴立坚]:
大家好..我是戴立坚. 很高兴和万常华来到CSDN上做JS聊天的嘉宾. 很感谢大家来参与这次的讨论.
[2005-1-27 <time hour="13" minute="58"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">13:58:00</span></time>]
嘉宾[万常华]:
大家好,非常荣幸有这个机会能与大家在一起交流一下
[2005-1-27 <time hour="14" minute="0"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:00:00</span></time>]
[刘如鸿]:
虽然一开始JavaScript只是针对脚本设计的,但是发展到现在,已经“初步”具备了面向对象的功能,两位嘉宾如何看待JavaScript的面向对象呢?
[2005-1-27 <time hour="14" minute="1"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:01:00</span></time>]
[刘如鸿]:
从我个人的理解,基于JavaScript的面向对象本质上来说可以是Prototype-Based的继承实现方式,因为任何的实现严格意义来说只是采用了父对象的原型
[2005-1-27 <time hour="14" minute="4"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:04:00</span></time>]
嘉宾[万常华]:
OO 设计思想是 计算机语言向 现实模型靠拢 的必然发展过程,js作为一门脚本语言,也要引入这种设计思想,当然,目前因为语言本身的问题,把js作为一种面向对象的语言来做程序设计还有一些缺陷
[2005-1-27 <time hour="14" minute="7"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:07:00</span></time>]
嘉宾[戴立坚]:
关于面向对象 , 我觉得现在JS主要作用是操作其他对象. 例如 DHTML 中的window/document/element . 或者是其他环境中的对象 例如用 ActiveXObject 创建出来的对象或Mozilla的XMLHttpRequest . 但是 JS 本身带的面向对象的功能很弱 . 适合做一些简单的类库. 但很难达到大规模的类库的应用.
[2005-1-27 <time hour="14" minute="10"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:10:00</span></time>]
[刘如鸿]:
那么我请问,JavaScript在面向对象中还存在哪些缺陷呢?这些的缺陷是否可以通过一些手段去绕过去
[2005-1-27 <time hour="14" minute="11"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:11:00</span></time>]
嘉宾[戴立坚]:
脚本本身的语法功能很有限 . 并没有 class 这样的功能. 我比较看好的是 Mozilla 的 __defineGetter__/__defineSetter__ , 与Flash中ActionScript中的addProperty的功能 . 这些功能为面向对象提供了一定的方便 .
[2005-1-27 <time hour="14" minute="12"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:12:00</span></time>]
嘉宾[万常华]:
js是一门基于对象的语言,在基于web的js实际开发中,如果引入一些规范,我们基本上可以很少地方需要考虑他与面向对象之间的区别
[2005-1-27 <time hour="14" minute="12"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:12:00</span></time>]
嘉宾[戴立坚]:
当然 , MS的Behavior(HTC)是实现面向对象的很使用的技术 . 这个技术可以定义属性与事件等等 .
[2005-1-27 <time hour="14" minute="13"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:13:00</span></time>]
[刘如鸿]:
戴立坚,我想下面会有些人不太赞同你的观点,有人会举例bindows就是一个很庞大的类库,万常华实现的JSVM也是一个比较大的类库
[2005-1-27 <time hour="14" minute="14"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:14:00</span></time>]
[刘如鸿]:
戴立坚,我想下面会有些人不太赞同你的观点,有人会举例bindows就是一个很庞大的类库,万常华实现的JSVM也是一个比较大的类库
[2005-1-27 <time hour="14" minute="14"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:14:00</span></time>]
嘉宾[戴立坚]:
而在面向对象中 ,JS最缺陷的就是无法在语法上直接实现 override(虚拟方法) 的功能. 虽然可以用其他方法来模拟 , 但是写法的特殊和不直观,很影响JS做面向对象的应用.
[2005-1-27 <time hour="14" minute="14"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:14:00</span></time>]
嘉宾[戴立坚]:
是的 . 我很欣赏 Bindows 和 JSVM . 这些都做得很好 . 如果JS能在语法上提供一些更直接的支持 , 那么我觉得它们会发展得更好的.
[2005-1-27 <time hour="14" minute="16"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:16:00</span></time>]
[刘如鸿]:
那么对于JScript.NET,你们是如何看待呢?作为.NET环境下的一个半动态语言,除了拥有JavasScript的全部功能之外,还能够利用.NET Framework,按照微软的文档,JScript.NET是第一个实现了ECMA 262 Edition 3的语言,同时也引入了class,package等等关键字
[2005-1-27 <time hour="14" minute="16"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:16:00</span></time>]
嘉宾[戴立坚]:
如果 IE 等环境支持JScript.Net就更好啦. 可惜现在IE不支持 < script language=jscript.net >.. 所以JScript.Net目前的应用也只在.Net开发中 . 但是做.Net的开发,有C#和VB.NET这两个更强大的语言 , JScript.Net 的地位真的不上不下.
[2005-1-27 <time hour="14" minute="18"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:18:00</span></time>]
嘉宾[万常华]:
js能否成“库”,主要在于是否有一个良好的代码组织结构和规范
[2005-1-27 <time hour="14" minute="19"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:19:00</span></time>]
嘉宾[戴立坚]:
js 是否可对远程URL发送 XMLHttpRequest请求?
可以的. 但是要考虑以下情况: 操作系统是否支持 . 运行JS的环境是否允许你访问该URL. 一般的应用是网站在客户端通过XmlHttp/XmlHttpRequest来访问"本站"的内容 . 这个IE和MOZILLA都支持.
[2005-1-27 <time hour="14" minute="20"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:20:00</span></time>]
嘉宾[万常华]:
Jscript.Net 由于运行环境的限制,导致他在web端没有用武之地,我想MS
对此他是有考虑的
[2005-1-27 <time hour="14" minute="20"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:20:00</span></time>]
嘉宾[戴立坚]:
同意万常华. 我想当网络速度不在是库下载速度的障碍时,基于JS的库会得到大规模的应用.
[2005-1-27 <time hour="14" minute="21"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:21:00</span></time>]
[刘如鸿]:
很多人问我过这样的问题,JavaScript里面有真正对象吗?那么他是如何实现的,你们的理解呢?所谓继承呢?是在一个怎样的角度去说的
[2005-1-27 <time hour="14" minute="21"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:21:00</span></time>]
[刘如鸿]: “初步”的面向对象是不是应该说成基于对象?
是的,基于对象和基于原型的面向对象,这是一个很有意思的东西
[2005-1-27 <time hour="14" minute="22"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:22:00</span></time>]
嘉宾[万常华]:
通过一些手段,在本地建立一个cache机制,可以一定程度上解决 网络带宽带来的一些瓶颈
[2005-1-27 <time hour="14" minute="23"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:23:00</span></time>]
[刘如鸿]:
就我个人而言,我不是特别赞成太依赖于脚本,如果我们将脚本虚拟机的运行环境扩充而且能够跨平台的话,那么这个时候脚本的优势才会更加明显,而目前,不论IE还是Mozilla,脚本解释器的功能还是极其有限的,对于简单的应用,它可以很好的解决,对于复杂的应用,可能好耗费比传统语言更多的精力才能够解决。那么从这个角度来说,我们是不是不要太过度使用脚本
[2005-1-27 <time hour="14" minute="26"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:26:00</span></time>]
嘉宾[戴立坚]: javascript 与 vbscript 的区别
基本上是语法上,提供的内置对象/函数的不同. vbscript支持Class但不支持继承. vbscript只适合microsoft或兼容的平台
[2005-1-27 <time hour="14" minute="27"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:27:00</span></time>]
嘉宾[万常华]:
js 的另外一个应用领域是 hta - Html Appliction 作为最接近web的一种应用程序,我们如果撇开 跨域完全 及 性能方面的考虑,就开发方式和运行方式而言基本上是一致的。
[2005-1-27 <time hour="14" minute="27"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:27:00</span></time>]
嘉宾[万常华]: javascript 能不能读取远程xml文件的数据
javascript 借助一控件比如 xmlhttp xmldom 可以实现读取远程xml,但这里有一个跨域安全限制的问题
[2005-1-27 <time hour="14" minute="28"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:28:00</span></time>]
嘉宾[戴立坚]: javascript 能不能读取远程xml文件的数据
这个是可以的 . 请参考 Microsoft.XMLHttp 或 Mozilla 的 XMLHttpRequest . 这两个对象的接口基本一致.
如果是在浏览器上应用 , 则通常会被浏览器拒绝程序访问其他网站的数据.
如果是在一些有更高权限的环境 , 如 WScript , 就能访问其他站点的数据了.
[2005-1-27 <time hour="14" minute="29"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:29:00</span></time>]
[刘如鸿]:
现在可以开始自由提问,请大家讲问题提交到futurelight,最好指定哪个嘉宾回答您的问题,谢谢
[2005-1-27 <time hour="14" minute="29"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:29:00</span></time>]
嘉宾[戴立坚]: 非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 <time hour="14" minute="31"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:31:00</span></time>]
嘉宾[万常华]:
js运行方式导致性能上不及别的语言,但就逻辑描述能力和一些动态特征,甚至是别的一些语言所不及的
[2005-1-27 <time hour="14" minute="31"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:31:00</span></time>]
[刘如鸿]: 脚本语言的安全性问题?
这问题很有意思,其实也是基于Web应用的最大挑战,没有绝对的安全,您可以将一些交互性的逻辑放置在客户端,但是对于严格的商业逻辑判断还是需要在服务器处理的。
[2005-1-27 <time hour="14" minute="33"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:33:00</span></time>]
嘉宾[戴立坚]: 脚本语言的安全性问题?
其实脚本本没有什么安全的问题 . 这些问题都是被它的环境所限制的. 例如浏览器一般不给你使用某些对象,不允许访问本地磁盘,不允许访问其他站点的资源等等..
[2005-1-27 <time hour="14" minute="33"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:33:00</span></time>]
嘉宾[万常华]: 请万老师介绍一下JSVM好吗
JSVM 本质上是一个javascript 框架,遵循这个框架从事 js 开发,可以实现js code更好地被复用。
[2005-1-27 <time hour="14" minute="34"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:34:00</span></time>]
[刘如鸿]: js读取远程URL 是什么原因遭到拒绝访问的呢? 是远程URL的服务器不允许还是本地浏览器不允许?
还是安全的原因,从安全的角度考虑,IE是不允许你跨域访问的
[2005-1-27 <time hour="14" minute="37"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:37:00</span></time>]
嘉宾[戴立坚]: 说点JS的应用层面吧
这个首选是浏览器 . 然后就是用JS写 ASP WScript . 更有些程序会使用MS的Scripting技术来加载脚本来扩充程序的功能. 这个和VBA很像.
[2005-1-27 <time hour="14" minute="38"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:38:00</span></time>]
嘉宾[戴立坚]: 我还想问一下,jscrpit.net将来会有单独的开发环境出来吗?
这个不太清楚 . 我想如果MS要支持的话 ,将会在VS.NET中出现. 和C#,VB.NET一样的.
[2005-1-27 <time hour="14" minute="39"><span lang="EN-US" style="COLOR: darkgray; FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">14:39:00</span></time>]