访问函数对象的上下文属性如何?

时间:2012-09-04 17:57:24

标签: javascript

每个函数对象应该有两个“隐藏”属性(根据JavaScript的好部分,函数章节)

context

code

有没有办法访问这些属性?

1 个答案:

答案 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()的只读访问是依赖于实现的 - 但实际上通常是实现的。 )