Page 117 - 你不知道的JavaScript(下卷)
P. 117
return something( y, x );
}
return y - x;
}
} );
仔细观察。看到问题所在了吗?这个简洁方法定义意味着 something: function(x,y)。看
出我们依赖的第二个 something 是如何被省略了吗?换句话说,简洁方法意味着匿名函数
表达式。
啊,有点恶心。
可能你会把 => 箭头函数当作是对这种情况的一个好的解决方案,但是它同
样也是不够的,因为它们也是匿名函数表达式。我们将在 2.8 节介绍这一
部分。
部分挽回局面的消息是我们的 something(x,y) 简洁方法不会是完全匿名的。参见 7.1 节来
获取关于 ES6 函数名推导规则的信息。对于我们的递归来说这没有什么帮助,但是至少有
助于调试。
所以对于简洁方法能得出什么结论呢?它们简洁方便。但是应该只在不需要它们执行递
归或者事件绑定 / 解绑定的时候使用。否则的话,就按照老式的 something: function
something(..) 方法来定义吧。
大量方法可能会从简洁方法定义中获益,所以这是好消息!只是需要注意这几种有命名问
题的情况。
2.ES5 Getter/Setter
严格说来,ES5 定义了 getter/setter 字面量形式,但是没怎么被使用,主要是因为缺少
transpiler 来处理这个新语法(实际上也是 ES5 新增的唯一主要新语法)。所以尽管这并不
是一个新的 ES6 特性,我们还是简单介绍一下这种形式,因为很可能在 ES6 及以后它们会
得到更广泛地使用。
考虑:
var o = {
__id: 10,
get id() { return this.__id++; },
set id(v) { this.__id = v; }
}
o.id; // 10
o.id; // 11
o.id = 20;
94 | 第 2 章
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权