zoukankan      html  css  js  c++  java
  • symbol

    1. 唯一值

            <script type="text/javascript">
                // bad
                // 1. 创建的属性会被 for-in 或 Object.keys() 枚举出来
                // 2. 一些库可能在将来会使用同样的方式,这会与你的代码发生冲突
                if (element.isMoving) {
                  smoothAnimations(element);
                }
                element.isMoving = true;
                
                // good
                if (element.__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__) {
                  smoothAnimations(element);
                }
                element.__$jorendorff_animation_library$PLEASE_DO_NOT_USE_THIS_PROPERTY$isMoving__ = true;
                
                // better
                var isMoving = Symbol("isMoving");
                
                ...
                
                if (element[isMoving]) {
                  smoothAnimations(element);
                }
                element[isMoving] = true;
            </script>

    2. 魔术字符串
    魔术字符串指的是在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。
    魔术字符串不利于修改和维护,风格良好的代码,应该尽量消除魔术字符串,改由含义清晰的变量代替。

            <script type="text/javascript">
                // bad
                const TYPE_AUDIO = 'AUDIO'
                const TYPE_VIDEO = 'VIDEO'
                const TYPE_IMAGE = 'IMAGE'
                
                // good
                const TYPE_AUDIO = Symbol()
                const TYPE_VIDEO = Symbol()
                const TYPE_IMAGE = Symbol()
                
                function handleFileResource(resource) {
                  switch(resource.type) {
                    case TYPE_AUDIO:
                      playAudio(resource)
                      break
                    case TYPE_VIDEO:
                      playVideo(resource)
                      break
                    case TYPE_IMAGE:
                      previewImage(resource)
                      break
                    default:
                      throw new Error('Unknown type of resource')
                  }
                }
            </script>

    3. 私有变量
    Symbol 也可以用于私有变量的实现。

            <script type="text/javascript">
                const Example = (function() {
                    var _private = Symbol('private');
                
                    class Example {
                        constructor() {
                          this[_private] = 'private';
                        }
                        getName() {
                          return this[_private];
                        }
                    }
                
                    return Example;
                })();
                
                var ex = new Example();
                
                console.log(ex.getName()); // private
                console.log(ex.name); // undefined
            </script>
  • 相关阅读:
    湘潭oj1203/邀请赛A称号 数论+java睑板
    Ejb in action(七)——message与JMS
    Post和Get差异
    1.cocos2dx它Menu(CCMenuItemFont,CCMenuItemImage,CCMenuItemLabel,CCMenuItemSprite,CCMenuItemToggle)
    ftk学习记录(IME文章)
    内部类创建一个内部版本
    使用gson和httpclient呼叫微信公众平台API
    hdu
    Beginning Python From Novice to Professional (5) - 条件与循环
    24点经典算法
  • 原文地址:https://www.cnblogs.com/wangxi01/p/11590134.html
Copyright © 2011-2022 走看看