提取所有使用过的javascript变量

时间:2013-03-01 14:33:52

标签: javascript

我在全局范围内定义了一个名为global的大对象。我想在我的变量global下动态查找所有引用的属性。也就是说,在执行代码期间访问的所有属性。

我想进行静态代码分析,以提取变量下的所有引用属性。我可以搜索这些模式:global.PROPERTY_NAME和全局[PROPERTY_NAM]。但是,像这些复杂的情况呢?

var tmp="PROPERTY_NAME";
global[tmp]

OR

var tmp=global;
tmp.PROPERTY_NAME

和其他人?

我不想获取所有变量的属性。我只想要一个引用的ONES列表!!仅在我的源代码中引用的属性

2 个答案:

答案 0 :(得分:3)

编辑后:

您正在寻找的是JavaScript Proxy对象。 Here is a tutorial关于如何使用它们。

代理对象允许您在访问其属性时包装对象并执行方法。不幸的是,目前它们已被 广泛支持。

目前,只有JavaScript才能在不更改原始global对象的情况下实现此目的。

您可以在about:flags标签中启用实验性JavaScript,在Chrome中打开它们。

在您修改之前:

您正在寻找的功能称为reflection,JavaScript支持它本地

以下是一些迭代对象并获取其属性的代码

for(var prop in global){
    if(global.hasOwnProperty(prop)){ //this is to only get its properties and not its prototype's
        alert(prop+" => "+global[prop]);
    }
}

这是相当跨浏览器的。更现代的浏览器允许您以更简单的方式执行此操作,例如Object.keys(global)返回包含其所有可枚举属性的数组,或Object.getOwnPropertyNames(global)返回可枚举和不可枚举属性。

答案 1 :(得分:1)

由于JavaScript的动态特性,您无法通过静态代码分析实现这一目标。想想这样的案例:

var prop = document.getElementById('prop').value;
global[prop];

不可能。另一种动态分析意味着您修改全局对象以记录对其属性的访问权限,然后运行代码。这在JavaScript中很容易实现,但它也无济于事,因为您如何确保已覆盖所有可能的访问权限?特别是在5 MB的JavaScript中,您最有可能会监视边缘情况。

所以,如果你不能缩小你的要求,就不可能。