提取所有使用的javascript变量

提取所有使用的javascript变量,javascript,Javascript,我在全局范围中定义了一个大对象,名为global。我希望动态查找变量global下的所有引用属性。也就是说,在代码执行期间访问的所有属性 我想进行静态代码分析,以提取变量下的所有引用属性。我可以搜索这些模式:global.PROPERTY\u NAME和global[PROPERTY\u NAM]。但是,像这样复杂的案件呢 var tmp="PROPERTY_NAME"; global[tmp] 或 其他的呢 我不想获取变量的所有属性。我只想要一个被引用的列表!!编辑后仅在我的源代码中引用的属

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

我想进行静态代码分析,以提取变量下的所有引用属性。我可以搜索这些模式:global.PROPERTY\u NAME和global[PROPERTY\u NAM]。但是,像这样复杂的案件呢

var tmp="PROPERTY_NAME";
global[tmp]

其他的呢

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

您要查找的是JavaScript对象。关于如何使用它们来实现这一点

代理对象允许您在访问对象的属性时包装对象并执行方法。不幸的是,就目前的情况来看,它们没有得到广泛的支持

在JavaScript中,这是目前唯一一种在不更改原始
global
对象的情况下实现这一点的方法

通过在about:flags选项卡中启用实验JavaScript,可以在Chrome中打开它们

编辑前:

您正在寻找的功能名为,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]);
    }
}
这是相当跨浏览器的。更现代的浏览器允许您以更简单的方式执行此操作,例如返回包含其所有可枚举属性的数组,或同时返回可枚举属性和不可枚举属性。

编辑后:

您要查找的是JavaScript对象。关于如何使用它们来实现这一点

代理对象允许您在访问对象的属性时包装对象并执行方法。不幸的是,就目前的情况来看,它们没有得到广泛的支持

在JavaScript中,这是目前唯一一种在不更改原始
global
对象的情况下实现这一点的方法

通过在about:flags选项卡中启用实验JavaScript,可以在Chrome中打开它们

编辑前:

您正在寻找的功能名为,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]);
    }
}

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

由于JavaScript的动态特性,静态代码分析无法实现这一点。想想这样的例子:

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

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


因此,如果你不能缩小你的需求范围,这是不可能的。

由于JavaScript的动态特性,你无法通过静态代码分析来实现这一点。想想这样的例子:

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

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


所以,如果你不能缩小你的需求范围,这是不可能的。

可能有一点“for”循环,比如:for(element in global){alert(global[element]);}可能有一点“for”循环,比如:for(element in global){alert(global[element]);}我不想得到所有的变量属性。我只想要一张用过的清单!!代码中提到的属性only@nullException首先,没有必要粗鲁无礼,我是在利用自己的空闲时间帮你,没有回报。第二,我不知道你说的“二手货”是什么意思,你是说参考的吗?那些被分配到的人?那些被引用的?那些是函数并且被调用的?谢谢你的帮助。引用属性的列表我不想获取所有变量属性。我只想要一张用过的清单!!代码中提到的属性only@nullException首先,没有必要粗鲁无礼,我是在利用自己的空闲时间帮你,没有回报。第二,我不知道你说的“二手货”是什么意思,你是说参考的吗?那些被分配到的人?那些被引用的?那些是函数并且被调用的?谢谢你的帮助。引用属性的列表实际上是可能的,只是不支持跨浏览器。请参阅我的答案和示例。代理完全符合我所描述的,并且具有我所提到的限制。“动态分析,意味着您可以修改您的全局对象”-它不需要使用ECMAScript 6代理更改为全局对象,只需代理它,这就是重点,您不必覆盖边缘情况。我对代理非常兴奋,它们提供了很多功能:)好的,你不必修改对象,但这不是问题所在。问题是如何运行代码以覆盖对ojbect的所有可能访问。它实际上非常棒:)如果您看看这里的第一个示例“日志访问”:这是一个13行代码的问题。我以前曾问过这个问题,在另一个地方代理可能很棒:)它实际上是可能的,只是不支持跨浏览器。请参阅我的答案和示例。代理完全按照我所描述的做,并且具有我所理解的限制