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) 专享 尊重版权
   113   114   115   116   117   118   119   120   121   122   123