如何返回对象的接口名称/类型?

jol*_*olt 4 javascript

是否有一个函数或东西来获取对象的接口?

比如,对于<p/>= HTMLParagraphElement,我该如何检索它?

提前致谢!

Esk*_*t0n 6

我认为只有一种方法可以:获取所有可用接口的列表,通过此列表进行迭代,并使用instanceofoperator 检查变量值的类型.

这种方式应该如下:

var element = ... // here your element comes
var interfaces = [HTMLParagraphElement, HTMLDivElement];
var interface = interfaces.filter(function (x) { return element instanceof x; })[0].toString();
Run Code Online (Sandbox Code Playgroud)

现在你得到类似于function HTMLParagraphElement() { [native code] }接口变量的东西(如果是元素<p />).我认为这仅适用于V8(谷歌浏览器).现在您可以使用regexies来提取接口名称.

interface.match(/function (.+)\(\)/)[0]
Run Code Online (Sandbox Code Playgroud)

要获取以下可以使用的所有接口的列表(仅适用于HTML元素):

var interfaces = [];
for (var key in window) {
  if (key.indexOf('HTML') == 0)
    interfaces.push(window[key]);
}
Run Code Online (Sandbox Code Playgroud)

我同意duri的答案,所以你不需要枚举所有接口,使用constructor方法更容易获得原型函数.之后你可以使用我写的正则表达式来提取接口名称.


dur*_*uri 6

只需使用document.createElement('p').constructor,这将返回HTMLParagraphElement对象.

如果你想获得接口的名称(作为字符串),toString()在对象上调用方法(你会得到类似的结果[object InterfaceName])并使用一些字符串方法(例如正则表达式)解析它:document.createElement('p').toString().match(/^\[object (.*)\]$/)[1].