从其构造函数创建元素(不知道元素标签)

Create element from its constructor (without knowing the element tag)

是否可以创建一个元素,如果你有它的构造函数但不知道它的标签名称?

示例:

class CustomElement extends HTMLElement {}
customElements.define(genRandomString(), CustomElement);

是否可以创建 CustomElement 的新实例?或者有什么方法可以获取到它的标签名吗?

我问这个是因为我不确定将自定义元素传递给需要它们的函数的正确方法是什么:我是否需要同时传递名称和构造函数,以防有人可能需要创建一个元素(需要名称)或检查现有元素是否属于此类(需要构造函数)?

这是您要的吗:

let foo = "bar";
window[ genRandomString() ] = foo;

然后你想知道 getRandomString 产生了什么?

只有当你监视window时,你才能捕获添加到它的内容。

与WebComponents一样,只有当你hookcustomElements.define时,你才能记录使用的名称。
换句话说:弄乱它的 prototype 并可能破坏它的默认执行。

但这只有在你掌控一切的那一刻起才有效;您可能已经错过了当时已经创建的所有 Web 组件。

你能解释一下你为什么要这样做吗?

Is it possible to create an element if you have its constructor but don't know its tag name?

如果你有权访问构造函数(就像你说的那样),你可以只使用

const instance = new CustomElement();

请注意,如果 constructor 不符合 Custom Element constructor constraints,这可能会失败。