“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. mac composer 安装

    在命令行执行 curl -sS https://getcomposer.org/installer | php 如果没安装 curl 执行以下代码 php -r "readfile('htt ...

  2. 移动web端的react.js组件化方案

     背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...

  3. ElasticSearch问题记录

    1.Young GC导致集群master重新选举,一台server fail [2016-12-10 07:38:24,546][WARN ][transport ] [BFRD_1] Receive ...

  4. JavaFX 教程资料收集

    1. JavaFX中文资料 http://www.javafxchina.net/blog/docs/tutorial1/ 2. JavaFX入门教程 http://www.xrpmoon.com/c ...

  5. src/main/Java路径下的properties文件丢失

    在pom中加入代码: <build> <resources> <resource> <directory>src/main/java</direc ...

  6. 踏上Salesforce的学习之路(二)

    一.添加一个字段到对象中 1.给Merchandise对象添加一个Price字段 先点击右上角姓名旁边的Setup(不管你在哪个页面,点击Setup都能让你快速的回到首页,如下图所示),然后在左侧的Q ...

  7. druid sql黑名单 报异常 sql injection violation, part alway true condition not allow

    最近使用druid,发现阿里这个连接池 真的很好用,可以监控到连接池活跃连接数 开辟到多少个连接数 关闭了多少个,对于我在项目中查看错误 问题,很有帮助, 但是最近发现里面 有条sql语句 被拦截了, ...

  8. mongo遍历表

    $mongo = new MongoClient("mongodb://192.168.8.189:27017"); $collectObj = $mongo->select ...

  9. Where product development should start

    We all need to know our customers in order to create products they’ll actually buy. This is why the  ...

  10. 关于chrome控制台那些事

    作为一名前端,除了编写完美代码之外(个人还不具备),当然也要会调试啦,对于firebug比较而言,我还是更喜欢chrome控制台比较多(可能使用较多,更顺手的原因吧).所以来总结下,关于chrome控 ...