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

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

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

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

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

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

  6. 02_python是一种什么语言?

    python是一种什么语言? 1.低级语言与高级语言 最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果.后来为了方便记忆,就将用0.1序列 ...

  7. 杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析

    说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三 ...

  8. 几种常见语言的命名空间(Namespace)特性

    命名空间提供了一种从逻辑上组织类的方式,防止命名冲突. 几种常见语言 C++ 命名空间是可以嵌套的 嵌套的命名空间是指定义在其他命名空间中的命名空间.嵌套的命名空间是一个嵌套的作用域,内层命名空间声明 ...

  9. 两种动态加载JavaScript文件的方法

    两种动态加载JavaScript文件的方法 第一种便是利用ajax方式,第二种是,动静创建一个script标签,配置其src属性,经过把script标签拔出到页面head来加载js,感乐趣的网友可以看 ...

随机推荐

  1. Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理

    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理 1.1. 图像边缘一般都是通过对图像进行梯度运算来实现的1 1.2. Remark: 1 1.3.  1.失焦检测. 衡量画面模糊的主要方 ...

  2. iOS 阶段学习第十天笔记(字符串操作)

    iOS学习(C语言)知识点整理 一.字符串的操作 1)字符串的存储,字符数组,在堆里面申请内存空间. 实例代码: #include <stdlib.h> #include <stri ...

  3. 小型网站如何防范DDoS攻击

    ddos(Distributed Denial of Service,分布式拒绝服务攻击),俗称洪水攻击.是在传统的DoS攻击基础之上产生的新的破坏力更强的攻击方式.分布式拒绝服务攻击是指借助于客户/ ...

  4. HTTP协议中PUT和POST使用区别 【转载】

    有的观点认为,应该用 POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和 POST中任何一个来做创建或者更 ...

  5. svn备份与恢复

    公司把SVN服务器从windows迁移到linux,其主要步骤记录如下. windows上备份 "C:\Program Files\VisualSVN Server\bin\svnadmin ...

  6. codeforces 557D. Vitaly and Cycle 二分图染色

    题目链接 n个点, m条边, 问最少加几条边可以出现一个奇环, 在这种情况下, 有多少种加边的方式. 具体看代码解释 #include<bits/stdc++.h> using names ...

  7. Ubuntu Linux 环境变量

    2011年09月17日 Ubuntu 下设置adb环境变量 分类: 同Windows一样,Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环境变量.系统环境变量对所有系统用户都有效,用 ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——My ...

  9. 海外ubuntu,lamp,ftp,phpmyadmin配置

    海外ubuntu,lamp,ftp,phpmyadmin配置 1. 更换源 1.1 clean /etc/apt/sources.list file 1.2 Ubuntu Sources List G ...

  10. 定制炫彩界面:duilib与MFC 的对比

    duilib是以DirectUI为技术原理开发的一款轻量级Windows桌面UI库,使用XML来描述界面风格,界面布局,可以很方便的构建高效,绚丽的,非常易于扩展的界面.从而很好的将界面和逻辑分离,同 ...