File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change @@ -182,6 +182,61 @@ function getComplement(color) {
182
182
183
183
还有一点需要注意,Symbol值作为属性名时,该属性还是公开属性,不是私有属性。
184
184
185
+ ## 实例:消除魔术字符串
186
+
187
+ 魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码,应该尽量消除魔术字符串,该由含义清晰的变量代替。
188
+
189
+ ``` javascript
190
+ function getArea (shape , options ) {
191
+ var area = 0 ;
192
+
193
+ switch (shape) {
194
+ case ' Triangle' : // 魔术字符串
195
+ area = .5 * options .width * options .height ;
196
+ break ;
197
+ /* ... more code ... */
198
+ }
199
+
200
+ return area;
201
+ }
202
+
203
+ getArea (' Triangle' , { width: 100 , height: 100 }); // 魔术字符串
204
+ ```
205
+
206
+ 上面代码中,字符串“Triangle”就是一个魔术字符串。它多次出现,与代码形成“强耦合”,不利于将来的修改和维护。
207
+
208
+ 常用的消除魔术字符串的方法,就是把它写成一个变量。
209
+
210
+ ``` javascript
211
+ var shapeType = {
212
+ triangle: ' Triangle'
213
+ };
214
+
215
+ function getArea (shape , options ) {
216
+ var area = 0 ;
217
+ switch (shape) {
218
+ case shapeType .triangle :
219
+ area = .5 * options .width * options .height ;
220
+ break ;
221
+ }
222
+ return area;
223
+ }
224
+
225
+ getArea (shapeType .triangle , { width: 100 , height: 100 });
226
+ ```
227
+
228
+ 上面代码中,我们把“Triangle”写成` shapeType ` 对象的` triangle ` 属性,这样就消除了强耦合。
229
+
230
+ 如果仔细分析,可以发现` shapeType.triangle ` 等于哪个值并不重要,只要确保不会跟其他` shapeType ` 属性的值冲突即可。因此,这里就很适合改用Symbol值。
231
+
232
+ ``` javascript
233
+ const shapeType = {
234
+ triangle: Symbol ()
235
+ };
236
+ ```
237
+
238
+ 上面代码中,除了将` shapeType.triangle ` 的值设为一个Symbol,其他地方都不用修改。
239
+
185
240
## 属性名的遍历
186
241
187
242
Symbol作为属性名,该属性不会出现在` for...in ` 、` for...of ` 循环中,也不会被` Object.keys() ` 、` Object.getOwnPropertyNames() ` 返回。但是,它也不是私有属性,有一个` Object.getOwnPropertySymbols ` 方法,可以获取指定对象的所有Symbol属性名。
You can’t perform that action at this time.
0 commit comments