2016-10-30 2 views
0
<body> 
<h1 id="a">Site 3</h1> 

<script> 

var arr = [] 

for(var i in window) 
{ 
    arr.push(i) 
} 
console.log("a" in window)// true 
console.log(arr)// dont have property a why?! 
</script> 

</body> 

Но когда я запускаю console.log (arr) У меня нет в массиве, почему?Как я могу получить свойство window из элемента

+0

Что именно вы пытаетесь достичь? – charlietfl

+0

точно я хочу получить и нажать его в arr –

+1

Какую проблему с более высоким уровнем вы пытаетесь решить? – charlietfl

ответ

2

The things accessible on window не обязательно «собственные» свойства window и (это значительный бит) не являются необходимыми перечислимы. for-in только посещает перечислимые свойства (как «собственные», так и унаследованные).

В Chrome, например, автоматическое a глобальное является свойством прототипа прототипа window, и он помечается как не перечислимы:

var o = window; 
 
var where = "window" 
 
while (o && !Object.getOwnPropertyDescriptor(o, "a")) { 
 
    where = "prototype of " + where; 
 
    o = Object.getPrototypeOf(o); 
 
} 
 

 
console.log(where); 
 
console.log(Object.getOwnPropertyDescriptor(o, "a"));
<div id="a"></div>

Похоже, это в том же месте на Firefox.

Точная семантика того, как именованный доступ достигнут, не продиктована, пока работает in и работает window.a.

+0

нормально, так почему «а» в прототипе окна прототипа, а не в окне? –

+0

@MankamentGra: В соответствии с вышеизложенным он находится на прототипе * прототипа 'окна'. Я не знаю, в этот момент мы входим в подробности реализации, но «окно» очень сложно, взяв вещи из разных мест, включив объект ['WindowProxy'] (https: // www .w3.org/TR/html5/browsers.html # the-windowproxy-object) и т. д. Я не удивлен, найдя для него три слоя. –

Смежные вопросы