看看这个简单的例子 (不要理会这个,去编辑)
class MyElement extends HTMLElement {
customProperty = "something";
constructor() {
super();
console.log("My Element Constructor");
}
}
customElements.define("my-element", MyElement);
document.body.innerHTML = "<my-element></my-element>";
var myElement = document.querySelector("my-element");
console.log(myElement); //
console.log(myElement.customProperty); //Run Code Online (Sandbox Code Playgroud)
输出:
<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)
在主调用堆栈完成之前,不会调用自定义元素构造函数(但它是 HTMLElement 构造函数)。这是预期行为还是错误?
谢谢!
编辑
为了简化我的实际情况,我提出了前面的示例,但我现在认为它不适合说明我的问题(该示例确实可以正常工作)。感谢@connexo的回答,我能够隔离问题(这是一个具有许多依赖项的复杂项目)并将其转换为以下示例:
<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)
由于某种原因,当模板元素的内容被添加到shadowRoot时,这些元素将不会被解析,直到shadowRoot被添加到DOM。但是当直接修改shadowRoot的innerHTML时,即使shadowRoot不属于DOM,也会解析该内容。
感谢您的时间。
javascript constructor web-component custom-element native-web-component