JavaScript:什么是Expando Property?

时间:2010-08-20 08:28:35

标签: javascript memory-leaks

我在阅读有关JavaScript内存泄漏时遇到过这个属性。 我被告知此属性仅在Internet Explorer中受支持,并负责循环引用。

我尝试检查并发现此属性在任何浏览器中都不可用。任何人都可以提供有关此属性的任何见解以及它如何与内存泄漏相关联?

3 个答案:

答案 0 :(得分:13)

在阅读有关内存泄漏的文章后,我也来到这里同样的问题。在阅读完这些答案之后我仍然感到困惑,所以我想在经过一些研究之后我会分享我的发现。

在JavaScript中,知道.expandoProperty之类的东西是语言的一部分还是某人对属性名称很聪明,这可能会令人困惑。

内存泄漏文章中的

obj.expandoProperty也可能是obj.foo。他们试图通过使用" .expandoProperty"是该属性最初不作为对象的一部分存在。

var obj = {myProp: ''};
obj.myProp    = 'foo';  //myProp is not an expando property
obj.myNewProp = 'bar';  //myNewProp is an expando property

添加到混合中:.expando是一个仅限IE的属性,它设置或检索一个值,指示是否可以在对象中创建任意变量。" MSDN article

另见generalized discussion of expando properties on StackOverflow here

答案 1 :(得分:6)

简单地说,expando属性是最初不存在的属性。在Internet Explorer中,如果为DOM元素创建此类属性,则可能会导致内存泄漏。这是一个例子:

var div = document.getElementsByTagName('div')[0];
div.someProperty = true; // 'someProperty' is an expando property which may introduce a memory leak in IE

可以在Understanding and Solving Internet Explorer Leak Patterns

中找到更多信息

答案 2 :(得分:3)

我认为你的意思是expando Property ...带有空格,指的是对象的expando属性。它:

  

设置或检索一个值,该值指示是否可以在对象中创建任意变量。