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。
// 它们的区别是,前者会被登记在全局环境中供搜索,后者不会。
//里面的***这个标志就像 你给代码写的注释一样
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。