Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

使用 Symbol 作为对象的基础值

  在一般的封装中都不会对对象类型转基本类型做特殊实现,所以很多对象类型转成字符串都是默认的 '[object Object]',根本没卵用。一些比较好的封装即便实现了默认基本类型转换也只是改个名字而已,比如 '[object MyObject]' 这样的东西。到了 ES6 时代,我们是不是应该有更好的方案呢?
  我觉得,使用 Symbol 作为封装对象的默认基本类型转换结果会比较好,因为 Symbol 可以作为对象的 key 使用。比如下面这个 class 就设置了自己的 Symbol.toPrimitive 为一个唯一的 Symbol。这样这个类的实例就可以作为其他对象的 key 来使用了:
<script> class A { get [Symbol.toPrimitive]() { let symbol = Symbol('A'); let result = () => symbol; Object.defineProperty(this, Symbol.toPrimitive, { configurable: true, writable: true, value: result }); return result; } }; let a = new A; var storage = {}; storage[a] = 1; console.log(storage); </script>   这样在这个封装后续的使用中会带来极大的方便。比如要对这些对象和另外的对象保存一些关联关系时就不需要添加额外的属性,也不用创建一个 Map,只要用一个普通的对象做键值存储即可。而且上面这种写法在没有用到隐式类型转换时是不会调用 toPrimitive,也不会生成多余的 Symbol(只有在用到的时候才生成),所以不会浪费内存。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^