2013-07-21 120 views
6

昨晚,我非常无聊,我想到了一个小小的脚本。基本上我正在考虑PHP与JavaScript相比有多少内置函数,然后我意识到我真的不知道JavaScript实际上有多少函数。我想编写一个脚本,通过窗口对象来查看对象内部的每个对象等。我写了脚本,它的工作原理(在较小的对象上尝试过)。循环浏览窗口对象中的所有项目

但是,我的问题是,JavaScript不会让我循环整个窗口对象。

我曾尝试:

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

我也试过:

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

的代码都片段给我:

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 

但是,我知道里面有很多更多的属性的窗口对象。比如所有的SVG功能和HTML功能。为什么JavaScript跳过对象中的许多属性?

+0

有些属性是继承的,有些属性是不可枚举的。要获得不可枚举的属性,你可以在'window'和''prototype'链中的每个对象上使用'Object.getOwnPropertyNames()'。为了从原型链获得继承的对象,可以使用Object.getPrototypeOf()。 http://jsfiddle.net/FtVXN/ –

+0

@CrazyTrain谢谢你,你可以添加,作为一个答案,如果你想。 – Shawn31313

回答

4

在现代浏览器Object.getOwnPropertyNames()Object.getPrototypeOf()将帮助您获取原型链中所有对象的所有属性。

http://jsfiddle.net/FtVXN/

var obj = window; 

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

如果你想看到的原型对象的分离,然后添加一行提供了一个分频器。

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)); 

我认为我记得在Firefox中,一些全局没有出现,直到你访问它们。如果您发现这种情况,您可能需要做一点实验。

+0

谢谢。这有帮助。 – Shawn31313

+0

不客气。很高兴帮助。 –

相关问题