日期:2014-05-16  浏览次数:20367 次

JS牛人请进--对当今js的地位深表怀疑
最近一段时间一直在做Ajax的东西,不停的写程序,不停的学习,不停的找资料,渐渐的心里堆积了越来越多对于JS的不满和疑问。
        他给我们的使用体验改善和性能提升的同时,js部分的代码也大量的增加了,从最基本的XML解析到一些相关页面效果的控制,还有一些跟业务逻辑相关的处理代码,都较以前的页面js成倍的增加。这些也没什么,我还是很喜欢这样的,因为这样能够尽量减少与服务器的交互来提升性能,看见页面迅速且无刷新的变化,心里还是挺高兴的。
        但是,问题来了,为了程序能在不同浏览器上运行,我不得不写很多代码来检测浏览器是否禁用JS?是否版本不够不能支持这个函数?不能支持那个函数?如果函数不支持怎么让这个功能实现?这个函数是IE的专利,虽然效率更高,而且使用简单,却不得不使用DOM标准的方法来多写N行代码以适应所有的浏览器,而且DOM标准的方法也未必是在所有版本浏览器上都能运行的。而且一旦代码哪里出错,调试起来是非常麻烦的,相信大家都应该有体会,10行没什么,1000行呢。
        js应该算是页面端的主力了,但是为什么却受到浏览器的如此待遇,难道js只配做个网页特效,检查一下Form?
        大家都用平台来调试js?大家都把JS用到什么地方了,各位JS牛人都来谈一下自己的看法吧,我现在实在是很迷惑。

------解决方案--------------------
个人认为,JS 的兼容性不是也不会是严重问题,什么地方兼容不好了,把它抽象出来,再往下做 Adapter 就行了嘛。当然,这样一来会出现你说的十行变百行的问题,但你可能忽略了社区的力量,网上有很多中间代码,可以屏蔽浏览器差异。

另外,写一些(或找一些高质量的)底层工具库也是很有用的。比如,JS 的容器类做得很差劲,我就自己实现了一些 List 啊、Set 啊、LinkedList 啊、Iterator 啊之类的库,用了好多年了,能减少很多工作量。

对于,上面有人说到 JS 对 OOP 的支持不好,我觉得不然。既然用 JS 就不要以 Java 或 Cpp 的 OO 来约束它,虽然不能硬说是 OO,但 JS 自己的基于 prototype 的继承体系已经很完美了,提供了类与继承的支持而不影响其根本的灵活性,我觉得是很不错。

在我印象中,曾经遇到的最让我质疑 JS 的问题是命名空间。我的解决办法是,一个库只用一个全局名称,用它来充当 Java 和 Cpp 中命名空间的角色,然后库中部分都注册为其成员。而且这个全局名称命名有要求,比如一种实现:必须以“$”开头和结尾。这样的好处是,万一两个库命名空间重了,那么用任何一个文本编辑器对这个名称作全局替换就解决了。有了这个习惯之后我就再没有遇到过 JS 问题。。。

楼主大胆继续吧,个人认为,JS 不会再有大的改进了。虽然语言并不完备,很多保留字都还没定义完,但已经足够强劲和完美了。
------解决方案--------------------
是知识没有积累足够啊
浏览器不兼容?你写的程序的时候如果按照w3c的标准去写,就不会不兼容,不兼容的是极少部分,都是受微软的毒害,标准的方法不用,非搞个“投机取巧”的方法,事实未必如此
OOP?JS不能算是标准的OOP的,但是也是蛮不错的了,不能和C++和Java那样 是因为JS应用的平台和C++、Java很不一样
多线程?“多线程”其实是有的,你可以使用 window.setInterval和setTimeout,是BOM里的,这个不能算是JS里的,程序这个东西,就看你怎么写了,你如果牛的话,照样可以写出很好的程序

还有 不要把BOM(Browser Object Model)和DOM(document object model)和JavaScript混为一潭
DOM属于BOM,JS是用来操作BOM的,不要什么乱七八糟的东西都往JS上扣
------解决方案--------------------
当前问题就是学习,再学习..
没有什么技术是最完美的技术,难道在VB的时代,我们就知道有一天VB会到现在的天地么?
javaScript是在一些方面有缺陷的,可是那个语言没有缺陷?
其实,我本人认为,我们遇到的问题比如各种浏览器对Javascript支持的问题,开发浏览器的厂商一定会发现的,这些问题他们也会遇到,但是他们是怎么对待这个的,他们只关心自己的浏览器是不是当前的主流,根本就不会考虑程序员是不是编写时会遇到什么问题的,决定谁是浏览器的主流的主角是用户,也不会考虑程序员是不是编写时会遇到什么问题,他们关心的是自己用的爽还是不爽,只有程序员,开发者考虑这些问题,所以,我认为,向着主流的浏览器靠拢就是没有错的,至于技术方面还是开始的那句话--
当前问题就是学习,再学习..