按照对象里调用属性的方式,这样应该是没有问题的,但是为什么会出错呢?
let youxi = {
name: '狼人杀',
[Symbol('say')]() {
console.log('我可以发言');
},
[Symbol('zibao')]() {
console.log('我可以自爆');
}
}
youxi[Symbol('say')](); //报错
youxi[Symbol('zibao')](); //报错
后来查阅资料得知,因为Symbol('xxx')生成的标识是唯一的,所以定义在youxi里面的[Symbol('say')]是无法调用的,而解决方案如下
let youxi = {
name: '狼人杀',
[Symbol.for('say')]() {
console.log('我可以发言');
},
[Symbol.for('zibao')]() {
console.log('我可以自爆');
}
}
console.log(youxi);
youxi[Symbol.for('say')]();//我可以发言
youxi[Symbol.for('zibao')]();//我可以自爆
因为Symbol.for('xxx')生成的标识不是唯一的,所以定义在youxi里面的[Symbol.for('say')]是可以调用的
let S1=Symbol('say1')
let S2=Symbol('say1')
let S3=Symbol.for('say2')
let S4=Symbol.for('say2')
console.log(S1===S2)//false
console.log(S3===S4)//true
因为Symbol('xxx')生成的标识是唯一的,所以S1与S2不相等
因为Symbol.for('xxx')生成的标识不是唯一的,所以S3与S4相等