扩展HTMLElement接口时是否继承Element?相关技术疑问
JavaScript中扩展HTMLElement的核心疑问
JS借鉴了其他语言的类、接口和对象模型,但有自己的实现风格。

Mozilla文档将HTMLElement称为接口,它继承自Element,而Element又被称为类——这在Java里是完全行不通的写法,比如我们能看到这样的JS代码:
class ContentCardExample extends HTMLElement {
针对这种和Java逻辑差异的写法,以下是具体疑问的解答:
扩展HTMLElement时,是否会继承Element的方法?
会完整继承。JS的原型链继承机制会让HTMLElement的原型链上包含Element的所有方法和属性,你自定义的类不仅能拿到HTMLElement的成员,也能直接使用Element的方法,不会丢失任何内容。如果确实继承了,那HTMLElement是否实际是类,而“接口”的表述只是不准确?
这里的“接口”是Web API层面的术语,和Java的接口不是同一个概念。Web IDL(Web接口定义语言)里的“接口”,在JavaScript中会被映射成可被继承的构造函数(即类)。所以HTMLElement本质上是JS里可以被扩展的类,文档里的“接口”是从Web标准定义角度的称呼,并非语法层面的JS接口。HTMLElement是否新增了可调用的方法,还是会像Java接口那样强制我实现方法?
它会提供现成的可调用方法,完全不需要你手动实现。和Java接口的“契约式强制实现”不同,Web API里的HTMLElement已经内置了所有定义好的方法和属性,你继承它之后直接使用即可,不用自己补全任何方法。
内容的提问来源于stack exchange,提问作者Blcknx
相关产品推荐
相关产品推荐

