EcmaScript 6:尾部位置的新运算符

EcmaScript 6: New operator in tail position

即将推出的 ES6 标准要求尾部位置 new f(x) 形式的表达式是尾部调用。

我能想到一些这很重要的人为例子,例如

function Sum(n, m) {
  if (n === 0) {
    this.m = m;
  } else {
    return new Sum(n - 1, n + m);
  }
}

function f(n) {
  return new Sum(n, 0).m;
}

f(1000000)

但是有任何现实世界的用例吗?

P.S.:这是处理尾部位置的新运算符的规范:http://people.mozilla.org/~jorendorff/es6-draft.html#sec-expression-rules

这可能是为了完整性而添加的,而不是其他任何东西。毕竟,new 只不过是对新对象的函数调用。有一些例子并不完全是人为的,比如这个 LinkedList:

function LinkedList(list, next = null) {
   this.next = next;
   this.value = list.pop();

   if(list.length == 0) {
       return this;
   } else {
       return new LinkedList(list, this);
   }
}

// > var l = new LinkedList([1,2,3]);
// undefined
// > l.value
// 1
// > l.next
// LinkedList {next: LinkedList, value: 2}
// > l.next.next
// LinkedList {next: null, value: 3}