JavaScript: Что такое свойство Expando?
Я столкнулся с этим свойством, когда читал об утечках памяти JavaScript.
Мне сообщили, что это свойство поддерживается только в Internet Explorer и отвечает за круглые ссылки.
Я попытался проверить и обнаружил, что это свойство недоступно ни в одном из браузеров. Может ли кто-нибудь дать представление об этом свойстве и как он связан с утечками памяти?
Ответы
Ответ 1
Я пришел сюда с тем же вопросом, также после прочтения статьи о утечке памяти. Я все еще был в замешательстве после прочтения ответов здесь, поэтому я решил поделиться своими результатами после нескольких исследований.
В 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
См. также fooobar.com/questions/113674/....
Ответ 2
Проще говоря, свойство 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
Я думаю, вы имеете в виду expando Property... с пробелом, ссылаясь на expando
свойство объектов. Это:
устанавливает или возвращает значение, указывающее, могут ли быть созданы произвольные переменные внутри объекта.