原文: 译者注:本文可能会看不大明白,推荐看Github上更完整的会议记录.
多亏了 ,我们才能看到这份TC39 在2012年9月18-20日期间的会议上所做的关于ECMAScript.next的决定的 .本文总结并解释了该记录的重点部分.
多亏了 ,我们才能看到这份TC39 在2012年9月18-20日期间的会议上所做的关于ECMAScript.next的决定的 .本文总结并解释了该记录的重点部分.
9月18号
重点:- 国际化API(ECMA-402)的最终草案已经通过(, ).接下来会被提交到Ecma大会进行审批.该API不依附于ECMAScript,单独存在,它将被使用在ECMAScript 5或更高版本的ES标准上.
- TC39讨论了River Trail ,这是一个能让JavaScript进行并行编程的扩展.River Trail不会被添加到ECMAScript 6中,但有可能被添加到ECMAScript 7或者更新的版本中.
- 讨论了一段时间关于为属性批量赋值和批量定义属性的运算符.最终的决定是不使用运算符,而使用合并函数配合对象字面量的方式.这种两个对象的合并操作已经在第三方的框架中很流行了.比如,Underscore.js中的.ECMAScript 6将会引入函数:
Object.assign(target, source)
- 将source中所有自身的可枚举属性复制到target身上.
- 属性会通过[[Get]]读取,通过[[Put]]写入.这就意味着如果target上有setters,则会在复制过程中调用它.
- 名称为私有标志的属性不会被复制.
- 名称为唯一标志的属性会被复制.
- 从原型链上继承到的方法将会进行一些配置,以能够让它们在target身上运行.这些方法会拥有一个指向它们所寄身的对象的属性.
- 返回:修改后的target.
[source1, source2, source3].reduce(Object.assign, target);
Object.define(target, source)
- 将source中所有的自身属性复制到target身上.
- 属性是这样赋值的:首先读取source身上的属性描述符,然后使用这个属性描述符在target身上定义属性.
- 名称为私有标志的属性不会被复制.
- 名称为唯一标志的属性会被复制.
- 从原型链上继承到的方法将会进行一些配置,以能够让它们在target身上运行.
- 返回:修改后的target.
- 可枚举的的方法: ECMAScript.next提供了一种更紧凑的的方式来在对象字面量中定义方法:
obj = { theMethod(x, y) { return x * y; } };
obj = { theMethod: function (x, y) { return x * y; } };
9月19号
重点:- 提炼更好的proxy API.
- 属性名对象现在正式称之为标志(symbols)了. 这是一个很好的决定.现在你可以这么说:每个属性都有个名称.名称可以是一个字符串,或者是一个标志.
- 标志(symbols)的语法一共有两个需要注意的地方:首先,最初引入了一个大部分人难以理解的间接引用写法:
let sym = new Symbol(); let obj = { // 计算出的属性名(已废弃特性!): [sym](x, y) { ... } }; console.log(obj[sym](7, 5));
private @sym; let obj = { @sym(x, y) { ... } }; console.log(obj.@sym(7, 5));
9月20号
重点:- :该方法提供了一种机制,可以用来进行内置的数据绑定行为.数据绑定已经被使用在了很多的用户界面框架中(比如:qooxdoo, SproutCore):如果有人改变了一个模块对象的某个属性的值,则这次改变马上会在用户界面上体现出来.Object.observe()不会被添加到ECMAScript 6中,但有可能出现在ECMAScript 7中.Chrome已经实现了一个该特性的原型.
- 瘦箭头:目前,ECMAScript 6中只有胖箭头(=>)函数.它可以提供一种更紧凑的写法来创建一个非方法的函数(non-method functions,拥有词法this,也就是静态this).有些人还希望引入一个瘦箭头(->)函数,它和普通的函数一样,有动态的this.可是,TC39达成的共识是:这两种相似的语法可能会让用户感到困惑,因为他们不得不在完成某项任务前首先思考清楚该使用哪种箭头.传统的函数写法仍然可用,可以用来代替瘦箭头函数.我喜欢这个决定,因为我们多了一个写法更简单的选择:
- 需要一个方法? 在类或对象字面量中使用紧凑形式的方法定义.
- 需要一个非方法的函数? 使用一个(胖)箭头函数.
- 存在运算符(Existential operator):CoffeeScript给我们提供了一种链式的属性访问方式,其特点是能在出现第一个值为undefined或null的属性时提前结束剩余属性的读取:
result = obj?.prop1?.prop2?.prop3
- 时间进度表:ECMAScript 6规范应该会在2013年1月完成所有的特性制定工作(feature-complete).
参考
- [解释了TC39是什么]