美文网首页
关于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