ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ES6-Symbol类型添加的对象方法调用以及注意事项

2021-10-20 10:31:04  阅读:570  来源: 互联网

标签:ES6 console log Symbol say let youxi 注意事项


symbol 是一种基本数据类型. 每个从Symbol()返回的symbol值都是唯一的。一个symbol值能作为对象属性的标识符;这是该数据类型仅有的目的。

 

 //向对象中添加方法 up down
  let game = {
    name:'俄罗斯方块',
    up: function(){},
    down: function(){}
  };
  // 声明一个对象
  let methods = {
    up: Symbol(),
    down: Symbol()
  };
  game[methods.up] = function(){
    console.log("我可以改变形状");
  }
  game[methods.down] = function(){
    console.log("我可以快速下降!!");
  }
game[methods.up]();
game[methods.down]();
let youxi = {
    name:"狼人杀",
    [Symbol.for('say')]: function(){
      console.log("我可以发言")
    },
    [Symbol.for('zibao')]: function(){
      console.log('我可以自爆');
    }
  }
  console.log(youxi);
  //Symbol.for('say')产生的标识是唯一的,所以可以调用定义在youxi里面的[Symbol.for('say')]方法
  youxi[Symbol.for('say')]();
  youxi[Symbol.for('zibao')]();

 

 

let youxi1 = {
    name:"狼人杀",
    [Symbol('say')]: function(){
      console.log("我可以发言")
    },
    [Symbol('zibao')]: function(){
      console.log('我可以自爆');
    }
  }
  youxi[Reflect.ownKeys(youxi)[1]]();
  youxi[Reflect.ownKeys(youxi)[2]]();
  //静态方法 Reflect.ownKeys() 返回一个由目标对象自身的属性键组成的数组。
  //这种情况无法直接调用,因为每次 Symbol("xxx") 都是不一样的
  //因为Symbol('say')生成的标识不是唯一的,所以定义的在youxi1里面的[Symbol('say')]是无法调用的,除非把Symbol('say')放块外面定义,并用变量保存
  console.log(Symbol('say')===Symbol('say')); //false
  // youxi1[Symbol('say')](); //报错
  // youxi1[Symbol('zibao')](); //报错

    let S1=Symbol('CSDN')
    let S2=Symbol('CSDN')
    let S3=Symbol.for('CSDN')
    let S4=Symbol.for('CSDN')
    console.log(S1===S2)//false
    console.log(S3===S4)//true
  //因为Symbol('***')生成的标识不是唯一的,所以定义的S1不等于S2
  // Symbol.for()与Symbol()这两种写法,都会生成新的 Symbol。
  // 它们的区别是,前者会被登记在全局环境中供搜索,后者不会。
 //里面的***这个标志就像 你给代码写的注释一样

 

 

标签:ES6,console,log,Symbol,say,let,youxi,注意事项
来源: https://blog.csdn.net/KUANG1919/article/details/120860748

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有