考虑以下代码(取自mdn):
var a = [
"Hydrogen",
"Helium",
"Lithium",
"Beryllium"
];
var a2 = a.map(function(s){ return s.length });
var a3 = a.map( s => s.length );
是否可以缩短它? E.g:
var a4 = a.map( .length );
以上操作不起作用(导致SyntaxError: Unexpected token .
)。
那么在ES2015中有没有办法做到这一点?
答案 0 :(得分:1)
好吧,您可以尝试定义这样的代理对象:
_ = new Proxy({}, {
get: (t, name) => x => x[name]
});
然后
var a3 = a.map(_.length)
这是否有意义是另一个问题。
答案 1 :(得分:0)
更短的语法看起来像
var a4 = a.map(({ length }) => length); // [8, 6, 7, 9]
其中a4元素将在长度上自动调用
答案 2 :(得分:-1)
你不能这样做,因为它会与property accessors的使用方式发生冲突。
来自ECMAScript® 2015 Language Specification:
在规范文本和算法中,点符号可用于指代记录值的特定字段。例如,如果R是前一段中显示的记录,则R。[[field2]]是“名为[[field2]]的R字段”的简写。
TL; DR语法不正确。在没有哲学的情况下,你无法访问任何财产。