Web 技术研究所

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

getOwnPropertySymbols 的悲伤

  Chrome38引入Symbol是一件值得庆幸的事,但庆幸之余还是有点小纠结。为什么要有getOwnPropertySymbols这东西能存在?如果Symbol用于封装的话,应该让外部无法访问到内部定义的Symbol才对,可以访问的话,封装性就大打折扣了,而且还会带来各种问题。
  实际上Chrome38就支持这个方法。。
<script>
var a={};
for(var i=0;i<10;i++)a[Symbol()]=i;
var s=Object.getOwnPropertySymbols(a);
console.log(s);
</script>

  规范甚至内置的Symbol也可以抓取到(虽然这个本身就可以从Symbol构造器上访问) <script>
console.log(Object.getOwnPropertySymbols(Array.prototype));
</script>
  但好在一些浏览器的内置Symbol不会被抓到,比如v8用来实现私有成员的一些Symbol。

  即便如此,封装中再也不能妄想使用Symbol在对象上添加什么奇怪的东西而不被发现了。果然是“党与人民在监督,总目葵葵难逃脱啊”。对于ES6兼容的完美封装也许只剩下SetMap以及Weak版了吧。
  说到Weak版又要考虑Symbol的另一个问题。如果Symbol可以从对象上被获取,那么只要对象存在,Symbol就不可能失去引用,资源就不能及时释放。那么是不是应该有WeakSymbol呢?在Symbol失去引用后对象上资源可以释放不是更好吗?
  其实对于ES6甚至更新的技术(新到没有浏览器支持的东西),这方面我的言论还是比较幼稚的。这些也许真是我的异想天开,请用力地吐槽吧。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^