【发布时间】:2011-04-01 13:17:08
【问题描述】:
我在阅读有关 JavaScript 内存泄漏的信息时遇到了这个属性。 我被告知该属性仅在 Internet Explorer 中受支持,并且负责循环引用。
我尝试检查并发现此属性在任何浏览器中均不可用。谁能提供有关此属性的任何见解以及它与内存泄漏的关系?
【问题讨论】:
我在阅读有关 JavaScript 内存泄漏的信息时遇到了这个属性。 我被告知该属性仅在 Internet Explorer 中受支持,并且负责循环引用。
我尝试检查并发现此属性在任何浏览器中均不可用。谁能提供有关此属性的任何见解以及它与内存泄漏的关系?
【问题讨论】:
我也是带着同样的问题来到这里的,也是在阅读了一篇关于内存泄漏的文章之后。在这里阅读答案后我仍然感到困惑,所以我想在进行更多研究后分享我的发现。
在 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。
【讨论】:
简单地说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找到
【讨论】:
我认为您的意思是 expando Property... 带有空格,指的是对象的 expando 属性。它:
设置或检索一个值,该值指示是否可以在对象中创建任意变量。
【讨论】: