Web 技术研究所

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

Object.observe监听arguments映射的问题

  Object.observe这个API允许程序监听一个对象的属性变化,而arguments对象在非严格模式下有参数映射机制。那么,用Object.observe去监听arguments对象不就相当于监听了局部变量的变化了吗?但这个行为到底如何我也不知,目前Chrome并没有如此实现。
  下面这个代码请在Chrome上测试,目前仅Chrome支持Object.observe <script>
void function(a){
  console.log(Object.getOwnPropertyDescriptor(arguments,0));
  Object.observe(arguments,function(e){
    console.log(e); //不会执行到
  });
  a++;
  console.log(Object.getOwnPropertyDescriptor(arguments,0));
}(1);
</script>

  测试于 Chrome39@Windows7,Object.observe没有监听到任何动作,但是arguments[0]的值确实改变了。我们再去Firefox上测试试试,使用Firefox特有的watch方法: <script>
void function(a){
  console.log(Object.getOwnPropertyDescriptor(arguments,0));
  arguments.watch(0,function(){
    console.log(arguments); //不会执行到
  });
  a++;
  console.log(Object.getOwnPropertyDescriptor(arguments,0));
}(1);
</script>

  测试于 Firefox33@Windows7,同样的结果,虽然arguments[0]的值确实改变了,但无法监听到。这是算Feature还是BUG呢?arguments映射确实是历史遗留问题了,严格模式中已将其取消,但这个神奇的特性依然会对以后新增的东西产生影响。就这个Object.observearguments上使用的问题,我觉得应该能监听到才比较合理。不过这套API还没稳定,也许以后还有许多变化(被删掉也有可能),还是坐等稳定吧。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^