OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

使用简单的JavaScript,我们为什么应该抵制ES6的一些特性


分享到


分类 心得体会   关键字 分享   发布 newghost  1393255666000
注意 转载须保留原文链接,译文链接,作者译者等信息。  
(作者:青竹 目前供职于SAP)

更新: 2014年2月28日

作为一名专职的JavaScript开发者,我会密切关注有关JS最新动态,不过最近看过ECMAScript 6的一些新的语法后。我认为ES委员会已经偏离正确的轨道,正在将JavaScript引向错误的方向,很可能又在重复ES4的老路。

JavaScript的简单


长久以来,我一直认为当今JavaScript的广泛应用一部分原因是源于她的“简单”。

一定程度上也可以叫作“简陋”,因为她并不能让程序员很“舒服”的写代码。我曾经从事过很长时间的C#和Java的开发,一度认为JavaScript的讲法极其糟糕,跟很多人一样对这种语言非常不屑,甚至觉得她并不能称之为语言,到处都是坑:浏览器兼容,异步回调,继承机制,域,类型转换……

(注*参见  JavaScript就是一种垃圾语言 ;  Javascript诞生记-C和Self语言一夜情的产物 )

但自从Node.JS的横空出世,重新审视这门语言,你会发现这种简陋却可以让解释器很“舒服”地运行代码。在各种评测中,看到JavaScript虚拟机比Java虚拟机快个一两倍,甚至几倍已经不是什么新鲜事了。

这种性能的提升正是源自于她的简单,基于原型的超简面向对象实现方法;天生异步,没有复杂线程间的互锁和互斥;没有不可控的线程数量对CPU和内存的额外消耗,远小于各种主流编程语言的关键字的数量,以及灵活的闭包而形成的多样的代码组织形式,都决定了JavaScript是一种灵活高效的语言。

(注*参见 Web服务性能测试:Node完胜Java )

JavaScript的开放


目前JS被Node及其他平台采用的另一个原因是因为她的开放,目前JS引擎多达4,5种,这种局面也将长期持续下去,这些引擎相互之间在不断竞争,终究会不断提升JS的运行速度。

不光是Node,Java也早已内置了JavaScript的运行环境;最新的QT和Gnome也准备将JavaScript视为首选开发语言;微软在Win8也采用了WinJS技术;SAP最新推出的基于内存的数据库HANA,其中的XSEngine也正是由JS驱动的,与NodeJS的异步单线程不同,由于写法过于灵活,且程序流并不是很容易控制,XSEngine将其改造成同步多线程的形式,这一点其实已经有些违背JS的核心特性,但可以尽可能地保证ERP软件的正确性,降低ERP实施过程中的风险。

JS标准不是由一家公司制定的,也不存在专利问题。相对于使用Oracle的Java,微软的.NET,JavaScript的成本和风险似乎要低的多,这也是这些大公司选择基于JS技术,构建自己的JS平台的原因。

为什么要抵制ES6的部分标准


“简单”是JavaScript的立足之本。作为新的"C语言运行环境",“网页中的汇编语言”,理应追求性能第一,书写舒适第二。一些高级语言特性完全可以通过二次编绎到JavaScript来实现,其实CoffeeScript和TypeScript正是这么做的。这是一个很好的分工,语法语义应尽量保持接近底层,用最简单的方式实现,而不应添加过多的,复杂的,重复的特性添加入JavaScript核心,否则只会走Java越来越臃肿的老路。

我们都知道ECMAScript4,是一个著名的失败的标准。据说最初由Adobe撰写,后被ECMAScript委员会采纳,这其中有多少故事我们不得而知。我曾经也从事过一段时间的AS3的开发,一度被其优美,严谨的语法所迷住,其实当实并没有意识到,这样全新的语法体系对于浏览器来说可能过于复杂了,可能也正因为如此,其并没有在一款浏览器上真正实施过,同样这也可能是导致Flash Player越来越不稳定的原因。

现在翻开ES6的新特性,这些被遗弃的部分似乎又回来了,下面是我不太喜欢的几条(仅代表个人观点):

以下特性,部分截自此幻灯片:ECMAScript 6 需翻墙。

1. 看上去很美的类继承

class MetaLanguage extends Language {
  constructor(x, y, z, version) {
    super(x, y, z);
    this.version = version;
  }
  summary() {
    return version;
  }
}

看这段是不是觉得有点眼熟?为嘛这段跟微软的TypeScript的长得这么像?我们暂不去揣测标准制定者跟微软有何关系,但一下子用了这么多关键字,浏览器知道吗?

这一点已经其实已经颠覆了JavaScript的基础,采用基于类的对象模型(代码风格),代替原型模型实现面向对象;原型系统不预先设定基类,通过克隆/共享原型实现继承,过程简单,而且性能