JavaScript: что такое свойство Expando? - PullRequest
13 голосов
/ 20 августа 2010

Я сталкивался с этим свойством, читая об утечках памяти в JavaScript.Мне сообщили, что это свойство поддерживается только в Internet Explorer и отвечает за циклическую ссылку.

Я попытался проверить и обнаружил, что это свойство недоступно ни в одном из браузеров.Кто-нибудь может предложить какое-либо понимание этого свойства и как оно связано с утечками памяти?

Ответы [ 3 ]

13 голосов
/ 02 марта 2013

Я пришел сюда с тем же вопросом, также после прочтения статьи об утечках памяти. Прочитав ответы здесь, я все еще не понимал, поэтому подумал, что поделюсь своими результатами после еще одного исследования.

В 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

См. Также обобщенное обсуждение свойств расширения в StackOverflow здесь .

6 голосов
/ 20 августа 2010

Проще говоря, свойство 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

Дополнительную информацию можно найти в Основные сведения об утечках Internet Explorer

.
3 голосов
/ 20 августа 2010

Я думаю, вы имеете в виду expando Свойство ... с пробелом, относящимся к свойству expando объектов. Это:

устанавливает или извлекает значение, указывающее, могут ли произвольные переменные быть созданы внутри объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...