每个函数对象应该有两个“隐藏”属性(根据JavaScript的好部分,函数章节)
context
和
code
有没有办法访问这些属性?
答案 0 :(得分:2)
好吧,您可以使用toString()(或Mozilla的非标准toSource())轻松访问功能代码:
var x = function() { alert('Here is my happy function'); };
console.log(x.toString());
至于上下文,我认为DC不仅仅是简单的this
,而且实际上是关于执行上下文的。
更新:在ES5 specification中找到了一个有趣的片段,其中这两个属性实际上已在某些细节中描述 - 而不是抽象概念:
13.2创建函数对象
给定FormalParameterList指定的可选参数列表,a 由 FunctionBody 指定的主体,由...指定的词法环境 Scope ,以及一个布尔标志Strict,一个Function对象被构造为 如下:
...
将F的[[Scope]]内部属性设置为Scope的值。
...
将F的[[Code]]内部属性设置为FunctionBody。
同时:
词汇环境和环境记录值纯粹 规范机制并不需要对应任何具体的 ECMAScript实现的人工制品。这是不可能的 ECMAScript程序直接访问或操纵这些值。
所以我猜这关闭了关于访问函数的Scope
属性的问题。
至于Code
属性,Matt正确注意到它对toString()
的只读访问是依赖于实现的 - 但实际上通常是实现的。 )