JavaScript Web组件是基于Custom Elements、Shadow DOM和HTML Templates构建的原生可复用组件,支持样式隔离、逻辑独立与语义化标签,通过customElements.define()注册,具备生命周期钩子、属性监听、事件通信及slot内容分发能力。
JavaScript Web组件是基于浏览器原生标准构建可复用、封装良好的自定义HTML元素,核心依赖 Custom Elements、Shadow DOM 和 HTML Templates 三大API。不需框架即可实现样式隔离、逻辑独立与语义化标签。
通过 customElements.define() 注册新标签,类必须继承 HTMLElement:
constructor 中调用 super(),并可初始化 Shadow DOM(this.attachShadow({mode: 'open'}))connectedCallback 响应元素插入DOM的时机,适合渲染或绑定事件disconnectedCallback 清理
资源(如取消定时器、移除事件监听)observedAttributes 静态 getter,并在 attributeChangedCallback 中响应变化调用 attachShadow 创建影子根后,所有内部HTML和CSS默认与外部隔离:
::part 或 ::theme(实验性)暴露部分样式钩子,供外部有限定制 预定义结构,在 connectedCallback 中克隆内容,提升性能和可读性Web组件通过HTML属性、事件和方法对外提供接口:
set value(v) { this._value = v; this.render(); })this.dispatchEvent(new CustomEvent('change', {detail: {...}})),外部用 addEventListener 监听reset()、validate() 等,供JS脚本直接调用slot 实现内容分发,让使用者把HTML片段“注入”到组件指定位置组件注册后,像普通HTML标签一样使用,支持服务端渲染(SSR)友好:
document.createElement('my-input'),再设置属性或添加子节点export 导出类,按需导入;现代打包工具(Vite、Webpack)可自动处理