在我所贡献的JavaScript库(Node和浏览器)中(为了完整的测试覆盖率),我希望确保我们不仅能够更好地传递与IndexedDB相关的一般W3C测试,而且还能够与IndexedDB相关的基于WebIDL的接口测试。
为此做准备,当我在Event
和CustomEvent
接口上运行W3C的WebIDL测试时,我们正在使用事件多边形填充,一个测试要求在解析后变得明显{{1是interface CustomEvent : Event
的原型必须设置为CustomEvent
。请注意,我并未提及Event
对象的原型必须从CustomEvent
(ala Event
或CustomEvent.prototype = new Event();
)继承的任何要求,请注意,但是负责该类的对象的原型(构造函数CustomEvent.prototype = Object.create(Event);
)设置为CustomEvent
而不是默认值Event
)。
果然,在Chrome的控制台中,我发现对于内置界面,Function.prototype
确实是Object.getPrototypeOf(CustomEvent) === Event
。据我所知,我可以在polyfill中实现的唯一(基于标准的)方法是执行以下操作:
true
...但我在MDN上看到警告说这种方法在所有浏览器中都很慢。
我想我只需要选择性能是否值得更高标准的合规性。
然而,无论如何,我仍然希望更好地了解接口以这种方式继承的结果(也许这更像是我对JavaScript的理解而不是WebIDL本身。)
由于函数对象原型之间存在这样一种单纯的关联,继承接口的方法不会被基接口继承,期望类函数之间的原型连接只是为了任何可能希望在代码中对它们进行内省的人来表达接口之间的继承层次结构?或者对于类原型连接的这种特殊要求还有其他一些实际后果吗?