Page 118 - 你不知道的JavaScript(下卷)
P. 118
o.id; // 20
// and:
o.__id; // 21
o.__id; // 21--保持不变!
这些 getter 和 setter 字面量形式也可以出现在类中,参见第 3 章。
可能不是显而易见,实际上 setter 字面量必须有且只有一个声明参数;省略
这个参数或者列出多余的都是语法错误。所需的单个参数可以使用解构和默
认值(例如,set id({ id: v = 0 }) { .. }),但是 gather/rest... 是不允许
的(set id(...v) { .. })。
2.6.3 计算属性名
你可能也经历过下面代码片段中的这种情况,其中的一个或多个属性名来自于某个表达
式,因此无法用对象字面量表达。
var prefix = "user_";
var o = {
baz: function(..){ .. }
};
o[ prefix + "foo" ] = function(..){ .. };
o[ prefix + "bar" ] = function(..){ .. };
..
ES6 对对象字面定义新增了一个语法,用来支持指定一个要计算的表达式,其结果作为属
性名。考虑:
var prefix = "user_";
var o = {
baz: function(..){ .. },
[ prefix + "foo" ]: function(..){ .. },
[ prefix + "bar" ]: function(..){ .. }
..
};
对象字面定义属性名位置的 [ .. ] 中可以放置任意合法表达式。
计算属性名最常见的用法可能就是和 Symbols 共同使用(我们将在 2.13 节中介绍)。比如:
var o = {
[Symbol.toStringTag]: "really cool thing",
..
};
语法 | 95
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权