美文网首页
关于symbol的理解

关于symbol的理解

作者: 嗷呜的伍 | 来源:发表于2019-11-06 17:42 被阅读0次

    1.防止对象属性名或对象方法名冲突

    比如,你使用了一个他人提供的对象,但又想为这个对象添加新的属性(方法),新属性(方法)的名字就有可能与现有属性(方法)产生冲突。

    /* --不使用symbol情况下 --*/
    
    //别人创建了一个对象obj
    let obj = {
     a:1,
     b(){return 2}
    }
    obj.a //1
    obj.b() //2
    //你拿来使用然后创建一个a属性,一个b方法
    obj.a=2;
    obj.b = ()=>{retrun 3}
    //导致覆盖了原有的属性a的值以及原有的方法b
    obj.a //2
    obj.b() //3
    
    /* --使用symbol情况下 --*/
    //别人创建了一个对象obj
    let a = symbol('key_a');//属性值a
    let b = symbol('function_b');//方法b
    let obj = {
     [a]:1,
     [b](){return 2}
    }
    obj[a] //1
    obj[b]() //2
    //你拿来使用然后创建一个a属性,一个b方法
    obj.a=2;
    obj.b = ()=>{retrun 3}
    //这操作不会导致覆盖原有的属性a的值以及原有的方法b
    obj // {a: 2, b: ƒ, Symbol(key_a): 1, Symbol(function_b): ƒ}
    obj[a] //1
    obj.a //2
    obj[b] //2
    obj.b //3
    

    2.消除魔术字符串

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

    function getWeek(key) {
      let day = '';
      switch (key) {
        case 'one' : // 魔术字符串
          day = 'Monday' ;
          break;
        /* ... more code ... */
      }
    
      return area;
    }
    
    getWeek('one'); // 魔术字符串
    

    上面代码中,字符串one就是一个魔术字符串。它多次出现,与代码形成“强耦合”,不利于将来的修改和维护。

    常用的消除魔术字符串的方法,就是把它写成一个变量。

    let dayType = {
      one:'one',
      ...
    }
    function getWeek(key) {
      let day = '';
      switch (key) {
        case dataType.one : 
          day = 'Monday' ;
          break;
        /* ... more code ... */
      }
    
      return area;
    }
    
    getWeek(dataType.one); 
    

    此时,若是变量过多,为了防止值重复冲突,也不用花精力进行赋值,使用symbol就可以设置唯一值了。

    let dayType = {
      one:symbol(),
      tow:symbol(),
      three:symbol(),
      ...
    function getWeek(key) {
      let day = '';
      switch (key) {
        case dataType[one] : 
          day = 'Monday' ;
          break;
        /* ... more code ... */
      }
    
      return area;
    }
    
    getWeek(dataType[one]); 
    }
    

    相关文章

      网友评论

          本文标题:关于symbol的理解

          本文链接:https://www.haomeiwen.com/subject/qlxpbctx.html