Javascript 如何返回对象接口名称/类型?
是否有一个函数或什么东西来获取对象的接口 比如,对于Javascript 如何返回对象接口名称/类型?,javascript,Javascript,是否有一个函数或什么东西来获取对象的接口 比如,对于=HTMLParagraphElement,我将如何检索它 提前谢谢 我认为只有一种方法可以做到这一点:获取所有可用接口的列表,通过该列表进行迭代,并使用instanceof操作符检查变量值的类型 这种方法的工作原理如下: var element = ... // here your element comes var interfaces = [HTMLParagraphElement, HTMLDivElement]; var interf
=HTMLParagraphElement
,我将如何检索它
提前谢谢 我认为只有一种方法可以做到这一点:获取所有可用接口的列表,通过该列表进行迭代,并使用
instanceof
操作符检查变量值的类型
这种方法的工作原理如下:
var element = ... // here your element comes
var interfaces = [HTMLParagraphElement, HTMLDivElement];
var interface = interfaces.filter(function (x) { return element instanceof x; })[0].toString();
现在,在接口变量(如果元素是
)中获得类似于函数HTMLParagraphElement(){[native code]}
)的内容。我认为这只适用于V8(谷歌浏览器)。现在可以使用正则表达式提取接口名称
interface.match(/function (.+)\(\)/)[0]
要获取所有接口的列表,可以使用以下选项(仅适用于HTML元素):
我同意duri的回答,所以您不需要枚举所有接口,使用
构造函数方法更容易获得原型函数。之后,您可以使用我编写的正则表达式来提取接口名称。只需使用document.createElement('p')。构造函数
,它将返回HTMLParagraphElement
对象
interface.match(/function (.+)\(\)/)[0]
如果您只想获取接口的名称(作为字符串),请在对象上调用toString()
方法(您将得到类似于[object InterfaceName]
)的结果,并使用一些字符串方法(例如正则表达式)解析它:document.createElement('p').toString().match(/^\[object(.*\]$/)[1]
基于以下简单通用的解决方案:
document.getElementById("myPElement").constructor.toString()
可以返回两种类型的值(取决于web浏览器):
(最佳情况)类似于“[object HTMLParagraphElement]”的字符串
类似以下字符串:“function HTMLParagraphElement(){[native code]}”
现在,您必须做一些变通来完成任务,使用正则表达式对两个可能的字符串执行,并提取接口名称
var strConstr = myPElement.constructor.toString();
//Match "[object HTMLParagraphElement]":
new RegExp(/^\[object\s(.*)\]$/).exec(strConstr)[1];
//Match "function HTMLParagraphElement() { [native code] }"
new RegExp(/function (.+?)(/).exec(strConstr)[1];
这两个表达式都提取“HTMLParagraphElement”部分
警告:避免IE怪癖模式,它将失败,我将如何列出所有可用的接口?