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怪癖模式,它将失败

    ,我将如何列出所有可用的接口?