2013-07-21 10 views
6

Zeszłej nocy naprawdę się nudziłem i pomyślałem o małym pomyśle na mały scenariusz. Zasadniczo myślałem o tym, ile wbudowanych funkcji ma PHP w porównaniu z JavaScriptem, a potem zdałem sobie sprawę, że naprawdę nie wiem, ile funkcji faktycznie posiada JavaScript. Pomyślałem o napisaniu skryptu, który przejrzałby obiekt okna, w tym każdy obiekt wewnątrz obiektu i tak dalej. Napisałem skrypt i zadziałało (wypróbowałem go na mniejszym obiekcie).Zapętlałem wszystkie przedmioty w oknie obiektu

Jednak moim problemem jest to, że JavaScript nie pozwala mi pętli przez cały obiekt Windows.

próbowałem:

for (var key in window) { 
    console.log(key); 
} 

Próbowałem również:

var a = Object.create(window); 
for (var key in a) { 
    console.log(key); 
} 

Oba fragmenty kodu daje mi:

top 
window 
location 
external 
chrome 
Intl 
v8Intl 
document 
script1374438467163 
$pick 
$try 
IFrame 
Elements 
OverText 
IframeShim 
Mask 
Clientcide 
dbug 
value 
debugCookie 
StyleWriter 
StickyWin 
TabSwapper 
Collapsible 
Collapsable 
Drag 
Cookie 
Accordion 
Asset 
Spinner 
MultipleOpenAccordion 
MooTools 
typeOf 
instanceOf 
Type 
Hash 
Native 
$A 
$arguments 
$chk 
$clear 
$defined 
$each 
$empty 
$extend 
$H 
$merge 
$lambda 
$mixin 
$random 
$splat 
$time 
$type 
$unlink 
Browser 
$constructor 
Window 
$family 
Document 
$exec 
Slick 
Element 
uniqueNumber 
$ 
getDocument 
getWindow 
Selectors 
$$ 
addListener 
removeListener 
retrieve 
store 
eliminate 
Class 
Chain 
Events 
Options 
Request 
DOMEvent 
Event 
addEvent 
removeEvent 
addEvents 
removeEvents 
fireEvent 
cloneEvents 
Fx 
Swiff 
getSize 
getScroll 
getScrollSize 
getPosition 
getCoordinates 
getHeight 
getWidth 
getScrollTop 
getScrollLeft 
getScrollHeight 
getScrollWidth 
getTop 
getLeft 
setCNETAssetBaseHref 
Table 
BehaviorAPI 
Behavior 
Color 
$RGB 
$HSB 
$HEX 
Keyboard 
Locale 
URI 
CodeMirror 
JSHINT 
_ 
emmet 
Sidebar 
keyMods 
Layout 
MooShellActions 
Base64 
Dropdown 
editorsModified 
Track 
update_resource_input 
remove_resource 
prepareToSubmit 
submit_external_resource 
change_default_input_value 
validate 
warn 
disallowedPlatforms 
default_code_mirror_options 
MooShellEditor 
MooShellSettings 
disqus_developer 
disqus_identifier 
disqus_title 
csspath 
jspath 
imgpath 
mediapath 
codemirrorpath 
panel_html 
panel_css 
panel_js 
makefavouritepath 
example_server 
username 
static_hash 
csrfToken 
mooshell 
preload_resources 
DP 
resources 
default_text 
add_external_resource_url 
_gaq 
TowTruckConfig_enableAnalytics 
TowTruckConfig_cloneClicks 
TowTruck 
_gat 
gaGlobal 
style_html 
css_beautify 
js_beautify 
Beautifier 
language 
Heyoffline 
page_test 
i 
a 
key 
webkitNotifications 
localStorage 
sessionStorage 
applicationCache 
indexedDB 
webkitIndexedDB 
webkitStorageInfo 
CSS 
performance 
console 
devicePixelRatio 
styleMedia 
parent 
opener 
frames 
self 
defaultstatus 
defaultStatus 
status 
name 
length 
closed 
pageYOffset 
pageXOffset 
scrollY 
scrollX 
screenTop 
screenLeft 
screenY 
screenX 
innerWidth 
innerHeight 
outerWidth 
outerHeight 
offscreenBuffering 
frameElement 
crypto 
clientInformation 
navigator 
toolbar 
statusbar 
scrollbars 
personalbar 
menubar 
locationbar 
history 
screen 
postMessage 
close 
blur 
focus 
ondeviceorientation 
ontransitionend 
onwebkittransitionend 
onwebkitanimationstart 
onwebkitanimationiteration 
onwebkitanimationend 
onsearch 
onreset 
onwaiting 
onvolumechange 
onunload 
ontimeupdate 
onsuspend 
onsubmit 
onstorage 
onstalled 
onselect 
onseeking 
onseeked 
onscroll 
onresize 
onratechange 
onprogress 
onpopstate 
onplaying 
onplay 
onpause 
onpageshow 
onpagehide 
ononline 
onoffline 
onmousewheel 
onmouseup 
onmouseover 
onmouseout 
onmousemove 
onmousedown 
onmessage 
onloadstart 
onloadedmetadata 
onloadeddata 
onload 
onkeyup 
onkeypress 
onkeydown 
oninvalid 
oninput 
onhashchange 
onfocus 
onerror 
onended 
onemptied 
ondurationchange 
ondrop 
ondragstart 
ondragover 
ondragleave 
ondragenter 
ondragend 
ondrag 
ondblclick 
oncontextmenu 
onclick 
onchange 
oncanplaythrough 
oncanplay 
onblur 
onbeforeunload 
onabort 
getSelection 
print 
stop 
open 
showModalDialog 
alert 
confirm 
prompt 
find 
scrollBy 
scrollTo 
scroll 
moveBy 
moveTo 
resizeBy 
resizeTo 
matchMedia 
setTimeout 
clearTimeout 
setInterval 
clearInterval 
requestAnimationFrame 
cancelAnimationFrame 
webkitRequestAnimationFrame 
webkitCancelAnimationFrame 
webkitCancelRequestAnimationFrame 
atob 
btoa 
addEventListener 
removeEventListener 
captureEvents 
releaseEvents 
getComputedStyle 
getMatchedCSSRules 
webkitConvertPointFromPageToNode 
webkitConvertPointFromNodeToPage 
dispatchEvent 
webkitRequestFileSystem 
webkitResolveLocalFileSystemURL 
openDatabase 
TEMPORARY 
PERSISTENT 

Wiem jednak, istnieje wiele więcej właściwości wewnątrz obiektu Windows. Takich jak wszystkie funkcje SVG i funkcje HTML. Dlaczego JavaScript pomija wiele właściwości w obiekcie?

+0

Niektóre właściwości są dziedziczone, a niektóre z nich są nieprzeliczalne. Aby uzyskać właściwości nieprzeliczalne, użyjesz 'Object.getOwnPropertyNames()' w 'oknie' i na każdym obiekcie w łańcuchu prototypów. Aby uzyskać odziedziczone obiekty z łańcucha prototypów, użyłbyś 'Object.getPrototypeOf()'. http://jsfiddle.net/FtVXN/ –

+0

@CrazyTrain Dziękujemy, możesz dodać to jako odpowiedź, jeśli chcesz. – Shawn31313

Odpowiedz

4

W nowoczesnych przeglądarkach Object.getOwnPropertyNames() i Object.getPrototypeOf() pomoże Ci uzyskać wszystkie właściwości wszystkich obiektów w łańcuchu prototypów.

http://jsfiddle.net/FtVXN/

var obj = window; 

do Object.getOwnPropertyNames(obj).forEach(function(name) { 
     console.log(name); 
    }); 
while(obj = Object.getPrototypeOf(obj)); 

Jeśli chcesz zobaczyć separację obiektów prototypowych, a następnie dodać linię, która zapewnia dzielnik.

http://jsfiddle.net/FtVXN/1/

var obj = window; 

do { 
    Object.getOwnPropertyNames(obj).forEach(function(name) { 
     console.log(name); 
    }); 
    console.log("============================="); 
} while(obj = Object.getPrototypeOf(obj)); 

ja sądzę przypomnieć, że w Firefoksie, niektóre globalne nie pojawiają się aż do nich dostęp. Być może trzeba będzie trochę eksperymentować, jeśli okaże się, że tak właśnie jest.

+0

Dziękuję. To pomogło. – Shawn31313

+0

Nie ma za co. Cieszę się, że to pomogło. –

Powiązane problemy