如何获取定义对象的窗口?

3
我想检查一个对象是否是某个内置类的实例。问题在于我的检查代码可能不在定义对象的窗口中,因此x instanceof String会返回false,即使x是一个String。我需要的是类似于x instanceof getWindowOf(x)['String']这样的东西。但是,是否可以定义一个getWindowOf函数呢?
或者,如果我们能够获取JS应用程序的所有窗口,我们也可以通过另一种方式解决这个问题。top,以及通过递归循环top.frames,虽然接近了,但我们会错过弹出窗口。
那么有什么解决办法呢?
请注意,我只是以String为例。我真正想检查的是像Element或在浏览器中定义的任何其他类。

你想要检查哪个“特定的内置类”? - Christian C. Salvadó
1个回答

1
为了避免您在使用instanceof运算符时遇到的跨框架问题,并且您想要检查某个内置对象,我建议您使用Object.prototype.toString方法,它返回一个包含内部[[Class]]属性的字符串。例如,假设str是一个来自其他框架的字符串,而arr是一个数组对象:
Object.prototype.toString.call(str); // returns "[object String]"
Object.prototype.toString.call(arr); // returns "[object Array]"
// while
str instanceof String; // is false
arr instanceof Array; // is false
// and 
typeof arr; // "object"

更多信息:


但是,这样你就无法检查层次结构了。比如说,HTMLDivElement是一个Element。 - namin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接