是否可以使用ES2016代理来拦截“ typeof”操作?

Tah*_*aus 5 javascript ecmascript-6

是否可以定义一个拦截器的处理程序属性typeof proxyObjectMozilla上没有列出的陷阱将其列为拦截。

log*_*yth 6

拦截是不可能的typeof。代理对象的类型将与代理目标的类型相同。

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

  1. 对象(普通且未实现[[Call]])=>“对象”
  2. 对象(实现[[调用]])=>“函数”

代理是一个对象,它是否实现取决于创建时传递给代理[[Call]]的类型。您可以在http://www.ecma-international.org/ecma-262/7.0/#sec-proxycreatetarget步骤 7中看到。因此,如果您向其传递一个函数(它们都实现),那么代理也会如此,并且代理将返回.[[Call]]functiontypeof