我需要获取所有javascript对象的列表。换句话说,我需要所有这样的x存在的NameOfXObject:
x+""
will return "[object NameOfXObject]"
例如:
document+"" --> "[object HTMLDocument]"
window+"" --> "[object Window]"
locationStorage+"" --> "[object Storage]"
要sumarize: 我需要列表包含:" HTMLDocument"," Window"," Storage" ...
我已经尝试了
Object.keys(window)
但它不会返回所有对象
提前致谢,对不起我的英文
答案 0 :(得分:0)
您需要使用Object.getOwnPropertyNames遍历window
的原型链,以获取附加到其上的所有属性。
var target = window,
result = [];
do {
result = result.concat(Object.getOwnPropertyNames(target));
} while(target = Object.getPrototypeOf(target))
result = result
//Filter out properties such as "onclick" which are null by default
.filter(function(r){ return window[r] != null; })
//Optional: filter out those whose type is not "object"
.filter(function(r){ return typeof window[r] === 'object'; });
对我来说(此页面中的Chrome v50)将结果过滤为仅包含长度为24的属性名称
["SpeechSynthesisUtterance", "PresentationAvailability", "BeforeInstallPromptEvent", "CanvasRenderingContext2D", "SVGRadialGradientElement", "SVGLinearGradientElement", "SVGFEGaussianBlurElement", "SVGFEDistantLightElement", "SVGAnimatedTransformList"]
但所有这些都是函数而不是对象,因此对于那些x+''
会给出更像"function SpeechSynthesisUtterance() { [native code] }"
的内容,所以我不确定它是否包含您要查找的内容。< / p>
要获取包含['[object Math]', ...]
等字符串表示的列表,请添加
//Get the string representation of the global object
.map(function(r){ return window[r] + ''; });
对我来说,其中一个长度为24:'[object SpeechSynthesis]'