es6 symbol的出现是针对什么场景?

假如我有个对象放在工具(util.js)里面

let symbol = Symbol('whatever');
export let obj = {
    [symbol]() {
        console.log('log');
    },
    say() {
        console.log('say');
    }
}

我想要在组件里面使用这个方法,比如使用say(),我可以直接import obj,然后obj.say()。
如果我想要使用[symbol]的这个方法,岂不是还要将symbol export,然后import symbol和obj,再去执行obj[symbol]()。
这样岂不是更复杂了?

阅读 3k
2 个回答

一个不重复的值
node中有一个比较实际的场景,require('util').promisify.custom 就是一个 Symbol
用于设置自定义的promisify函数,不会担心这个属性被其他人误操作而覆盖。
我们也可以通过这个key来取出对应的函数。

Object.getOwnPropertySymbols() 方法返回一个给定对象自身的所有 Symbol 属性的数组。
let _symbol = Object.getOwnPropertySymbols(obj);
obj[_symbol[0]]()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进