是否有可能拦截" typeof"使用ES2016代理进行操作?

时间:2017-02-27 17:51:07

标签: javascript ecmascript-6

是否可以定义拦截typeof proxyObject的处理程序属性? Mozilla列出的所有陷阱都没有将其列为拦截。

1 个答案:

答案 0 :(得分:1)

无法拦截typeof。代理对象的类型将与代理目标相同。

您可以在此处的规范中看到此内容:http://www.ecma-international.org/ecma-262/7.0/#sec-typeof-operator-runtime-semantics-evaluation,表格的重要部分为

  1. 对象(普通且未实现[[Call]])=> “对象”
  2. Object(implements [[Call]])=> “功能”
  3. 代理是一个对象,它是否实现[[Call]]取决于在创建时传递给代理的target的类型。您可以在http://www.ecma-international.org/ecma-262/7.0/#sec-proxycreate步骤7中看到。因此,如果您向其传递一个函数(它们都实现[[Call]]),那么代理也将如此,并且代理将返回function for {{ 1}}。