zoukankan      html  css  js  c++  java
  • [译]ECMAScript.next:TC39 2012年9月会议总结

    原文:http://www.2ality.com/2012/10/tc39-september.html  译者注:本文可能会看不大明白,推荐看Github上更完整的会议记录.

    多亏了Rick Waldron,我们才能看到这份TC39 [1]在2012年9月18-20日期间的会议上所做的关于ECMAScript.next的决定的详细记录.本文总结并解释了该记录的重点部分. 

    9月18号

    会议记录重点:
    • 国际化API(ECMA-402)的最终草案已经通过(PDF下载页面, HTML格式).接下来会被提交到Ecma大会进行审批.该API不依附于ECMAScript,单独存在,它将被使用在ECMAScript 5或更高版本的ES标准上.
    • TC39讨论了River Trail [2],这是一个能让JavaScript进行并行编程的扩展.River Trail不会被添加到ECMAScript 6中,但有可能被添加到ECMAScript 7或者更新的版本中.
    • 讨论了一段时间关于为属性批量赋值和批量定义属性的运算符":=".最终的决定是不使用运算符,而使用合并函数配合对象字面量的方式.这种两个对象的合并操作已经在第三方的框架中很流行了.比如,Underscore.js中的_.extend.ECMAScript 6将会引入函数:
      Object.assign(target, source)
      • source中所有自身的可枚举属性复制到target身上.
      • 属性会通过[[Get]]读取,通过[[Put]]写入.这就意味着如果target上有setters,则会在复制过程中调用它.
      • 名称为私有标志的属性不会被复制.
      • 名称为唯一标志的属性会被复制.
      • 从原型链上继承到的方法将会进行一些配置,以能够让它们在target身上运行.这些方法会拥有一个指向它们所寄身的对象的属性[3].
      • 返回:修改后的target.
      目前只能添加一个source,因为未来可能会有另一个参数可以指定多个属性描述符.如果你想添加多个source,你可以这样(source1先被合并进target,然后是source2,依次类推):
      [source1, source2, source3].reduce(Object.assign, target);
      JavaScript中与"定义一个属性和为一个属性赋值的区别" [4] 有关的陷阱仍然能在这里体现.例如,如果你想在一个对象上添加属性foo,同时该对象的原型链上也有一个foo属性,且是访问器属性.那么Object.assign()不会让你在该对象身上添加foo这个属性,而是会调用那个访问器属性上的setter.有个函数Object.define()仍有待于进一步研究,以决定它是否应该被加入到ECMAScript 6中.
      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;
      }
      };
      以这种方式定义的方法将会是可枚举的[5].David Herman说过: “用户期望的现象是:它们创建的东西是可以枚举的,平台创建的东西是不可枚举的.”

    9月19号

    会议记录重点:
    • 提炼更好的proxy API.
    • 属性名对象[6] 现在正式称之为标志(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号

    会议记录重点:
    • Object.observe():该方法提供了一种机制,可以用来进行内置的数据绑定行为.数据绑定已经被使用在了很多的用户界面框架中(比如:qooxdoo, SproutCore):如果有人改变了一个模块对象的某个属性的值,则这次改变马上会在用户界面上体现出来.Object.observe()不会被添加到ECMAScript 6中,但有可能出现在ECMAScript 7中.Chrome已经实现了一个该特性的原型.
    • 瘦箭头:目前,ECMAScript 6中只有胖箭头(=>)函数[7].它可以提供一种更紧凑的写法来创建一个非方法的函数(non-method functions,拥有词法this,也就是静态this).有些人还希望引入一个瘦箭头(->)函数,它和普通的函数一样,有动态的this.可是,TC39达成的共识是:这两种相似的语法可能会让用户感到困惑,因为他们不得不在完成某项任务前首先思考清楚该使用哪种箭头.传统的函数写法仍然可用,可以用来代替瘦箭头函数.我喜欢这个决定,因为我们多了一个写法更简单的选择:
      • 需要一个方法? 在类或对象字面量中使用紧凑形式的方法定义.
      • 需要一个非方法的函数? 使用一个(胖)箭头函数.
      这就意味着,从长远看来,我们可能不会需要将this作为隐式参数传入一个非方法的函数中了(通过call或apply).在这种情况下,必须显式的将this作为参数传进去.
    • 存在运算符(Existential operator):CoffeeScript给我们提供了一种链式的属性访问方式,其特点是能在出现第一个值为undefined或null的属性时提前结束剩余属性的读取:
      result = obj?.prop1?.prop2?.prop3
      TC39认为这个特性是有用的,但在目前它的优先级还是不够.因此,也许不太可能会出现在ECMAScript 6中.
    • 时间进度表:ECMAScript 6规范应该会在2013年1月完成所有的特性制定工作(feature-complete).

    参考

    1. ECMAScript: ES.next versus ES 6 versus ES Harmony [解释了TC39是什么]
    2. JavaScript: parallel programming via River Trail coming to Firefox
    3. A closer look at super-references in JavaScript and ECMAScript.next
    4. Properties in JavaScript: definition versus assignment
    5. JavaScript properties: inheritance and enumerability
    6. Private data for objects in JavaScript
    7. ECMAScript.next: arrow functions and method definitions
  • 相关阅读:
    CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
    CYPEESS USB3.0程序解读之---GPIO
    USB 3.0 开发要点
    关于const声明一些东西
    __attribute__ 你知多少?
    char、signed char、unsigned char的区别总结。
    CentOS7安装配置SAMBA服务器
    linux版本FTP下载
    2021年1月29日
    2021年11月28日
  • 原文地址:https://www.cnblogs.com/ziyunfei/p/2734508.html
Copyright © 2011-2022 走看看