“Prototype”机制是个半成品OOP,有些文章说这玩意当初为了“简单(编写)、容易(学习)”而发明的,但web前端技术发展到今天我们看到,JS显然是需要OOP的,或者说web前端程序规模增长,需要OOP等更强大、方便的特性、机制。真要简单容易,你干脆不要提供能让人实现继承的什么prototype嘛。提供了结果呢,继承要额外手写代码实现,而且听说继承机制竟有五种之多,这不是反而难学、混乱、麻烦吗。

所以JS的prototype一是仓促懒惰二是没有前瞻性。没前瞻性说明白点,就是没有发展意识与战略眼光:在前端需求开始发展时就应该做出质的革新,网景(Netscape,后来变成FireFox基金会)不去好好做种前端语言,从技术上打倒微软,却劳民伤财的去跟人家打官司,格调不高雅,做事更不高明。

没有代码提示,主要导致生产率极其底下。没有代码提示是因为变量定义没有类型,而且没有类型限定之类的机制、语法来弥补。

没有包。凡是没有包的高层语言都是垃圾。

此处高层语言是指不直接操作硬件的语言,使用嵌入硬件语言技术不算。比如像jQuery,拿个“$”当包使,这像编程吗?什么玩意啊简直是!

最后导致二十多年后微软做TS,谷歌做Dart来擦屁股(谷歌还做了V8执行引擎),蔚为奇观。现在是2016年11月,这两种语言都发布几年了,且不说技术上的便捷程度如何,可中国招聘网站上竟然都还几乎没有这两种语言的职位!

就算用了还是要学新技术,增加成本。

就算用TS或Dart写了类,JS里面去调用还是不会有代码提示!垃圾就是垃圾。

重复造轮子,导致程序员换库麻烦。

那些写框架重复造轮子的人既是这场灾难的传播者也是受害者。

重复加载、浪费网络带宽、资源。

另外加载还得耗电耗时,导致便携式设备使用时间缩短。

耗时导致浪费人时间、工作效率下降、与网络拥堵互相加剧。

再强调一句:这些轮子大部分代码功能都一样。

到现在甚至js库都开始用管理器了!比如node.js搞的什么软件包管理器npm。

这里我特别要对软件业巨头提出强烈批评,

不指望你们开发多先进的浏览器,也不指望你们开发出新的脚本语言;百十万的高工牛人,就让浏览器能执行个写起来舒服点的python都没人能想到吗?

还在那一天用着几十年前的js和老外的js库开发各种所谓高大上的产品,简直丢人现眼。

这种垃圾语言我看都懒得看一眼,如果我去学,第一也是为了进行深入批判。嗯,所以这篇可能会有续篇。

我这人作为程序员的一项使命就是消灭网站和应用程序中的JS。

肯定有人骂我咋不自己写个浏览器,我的回答就是我命苦没钱自己在家做,以后有钱又要忙死。而且这么骂的人都是看不懂我那网站上Flash做的demo的蠢货或者干脆不是程序员的。

其实我还想让开源社区来实现浏览器或者“可以执行bean文档中嵌入的脚本的Spring”之类的应用产品,不花钱、有人替我实现才好。

最后我再唠一遍:JS就是网景公司当初为了网页能够互动而随手做的玩具语言。而且跟败在自己手下的微软的垃圾VB大概是一个档次。

最初的祸端主要是浏览器厂商不敢把UI组件写完善,怕阻碍开发者自己定制,又很贱地认为不会有开发者自己实现整套UI组件所以没提供底层API。我觉得其实是智商与能力不够,没有好的解决方案(IE之烂大家有目共睹,FF我怀疑已成为洗钱基金,开发团队我也也缺乏了解)。当然对比桌面应用程序以及第一代RIA(Flash、JavaFx、微软银光)来看就很明显的观察出,其实是因为UI组件被写死了。
UI既然写死那么就要尽量做得容易自定义 。这样就注定了现在大量JS框架纷乱于世的格局。
所以后来Html5第一要件就是提供Canvas这套绘图API让开发者可以完全地自己实现UI组件。
然而可悲的是依然没有一个大神或大厂站出来一刀剁了孽障JS 。

侃一侃:从浏览器的诞生与发展说JS

【夔堂】:程序血泪史之——有一种垃圾语言叫做JavaScript的更多相关文章

  1. 对于现代开发来说,JavaScript就是一种垃圾语言(转)

    伯乐在线导读:昨天 Reddit/Programming 频道的头条热帖是一篇来自 julik live 博主的技术吐槽文,最初的英文标题是"For modern development J ...

  2. Microsoft.VisualBasic.dll的妙用and 改善C#公共程序类库质量的10种方法

    Microsoft.VisualBasic.dll的妙用(开发中肯定会用到哦) 前言 做过VB开发的都知道,有一些VB里面的好的函数在.NET里面都没有,而Microsoft.VisualBasic. ...

  3. 程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题.

    1.程序错误通常有2种,一种是运行时错误,这种错误ide会抛出异常,我们可以根据异常寻找问题. 2.可以根据异常寻找问题. 3.可以根据异常寻找问题

  4. 设备程序远程升级采用两种方式(优先采用IP方式)

    设备程序远程升级采用两种方式(优先采用IP方式): 采用应急广播TS流传输技术规范的消息内容表携带升级包数据.当辅助数据类型值为44时,消息内容表传输的数据为程序升级包. 采用IP方式传输升级包数据. ...

  5. asp.net Core 获取应用程序所在目录的2种方式

    //获取应用程序所在目录的2种方式(绝对,不受工作目录影响,建议采用此方法获取路径).如:d:\Users\xk\Desktop\WebApplication1\WebApplication1\bin ...

  6. C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式

    C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...

  7. [.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_02_fileupload_picture_p ...

  8. Perl,Python,Ruby,Javascript 四种脚本语言比较

    Perl 为了选择一个合适的脚本语言学习,今天查了不少有关Perl,Python,Ruby,Javascript的东西,可是发现各大阵营的人都在吹捧自己喜欢的语言,不过最没有争议的应该是Javascr ...

  9. Python面试题之python是一种什么语言及优缺点

    1.说说python是一种什么语言? 参考答案:python是一门动态解释性的强类型定义语言 编译型vs解释型 编译型优点:编译器一般会有预编译的过程对代码进行优化.因为编译只做一次,运行时不需要编译 ...

随机推荐

  1. Java_新浪微博SDK_jar包下载

    新浪微博开放平台API_jar包下载地址:jar包(猛戳) --by HsuChan

  2. Ubuntu14.04下安装docker

    http://www.cnblogs.com/xiaoluosun/p/5520510.html

  3. Python爬虫学习(7):浙大软院网号嗅探

    软院这边网速是挺不错的,而且在宿舍和实验室都是可以通过学号直接登陆的上网的,但是..有的时候实验室的台式机需要一个网号,笔记本需要一个网号,或者再加上一个路由器需要一个,然后,感觉网号托托的不够呀.刚 ...

  4. swift-闭包(代码块)

    语法 通用的语法 {(parameters) -> return type in statements } e.g let studname = { println("Welcome ...

  5. HDU 2087  KMP模板题

    1.HDU 2087 2.题意:一个主串,一个子串,求子串在主串里出现了几次. 3.总结:看了题解,还是不太懂.. //#include<iostream>#include<cmat ...

  6. Xamarin的不归路-安卓模拟器启动慢&没有虚拟键盘

    1.启动慢解决方案:参考这篇文章进行配置 http://www.360doc.com/content/13/1002/18/532901_318605525.shtml 2.模拟器没有虚拟键盘解决方案 ...

  7. Django实现注册

    前言 对于web开来说,用户登陆.注册.文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性:对于web ...

  8. 三、jquery操作DOM

    DOM(Document Object Model, 文档对象模型)为文档提供了一种结构化的表示方法,通过该方法可以改变文档的内容和展示形式.在实际运用中,DOM更像是桥梁,通过它可以实现跨平台.跨语 ...

  9. ThinkPHP5 与 ThinkPHP3.* 之间的使用差异

    因为研究TP5时间不是很长,暂时先列以下几处差异: 1.过去的单字母函数已完全被替换掉,如下: S=>cache,C=>config,M/D=>model,U=>url,I=& ...

  10. IPC操作时IPC_CREAT和IPC_EXCL选项的说明

    IPC(包括消息队列,共享内存,信号量)的xxxget()创建操作时,可以指定IPC_CREAT和IPC_EXCL选项.以共享内存为例:当只有IPC_CREAT选项打开时,不管是否已存在该块共享内存, ...