我正在编写一个涉及大量 XML 操作的 HTML5 应用程序,该操作的一部分涉及比较两个不同 XML 元素的版本。
我需要的是每个元素、Attr 和 TextNode(所有这些都继承自 Node、AFAIK)对象,这些对象被创建为具有关联的版本信息,但仍然能够像普通的 Element、Attr 或 TextNode 一样工作。我用来存储版本信息的当前工作解决方案如下:
Node.prototype.MyAppAnnotation = {
Version : null
};
现在,我知道增加内置类型被认为是不好的形式,但除了这种技术,我不知道如何获得所需的功能。我不认为我可以将 Node 封装在包装器中,因为我需要在包装器上公开与 Node 相关的属性和函数。我也许可以为包装器编写某种传递函数,但这看起来真的很笨重。
我觉得因为我正在编写的应用程序是一个 HTML5 应用程序,因此只需要在最现代的浏览器上运行(所有这些浏览器都支持内置插件的增强),因此这种技术是合适的。此外,通过为我的扩充对象提供一个足够晦涩的名称,我可以避免所有命名冲突(故意冲突除外)。我还使用 Google 的 Closure 库探索了基于继承的解决方案。然而,似乎因为 Element、Node 和 TextNode 没有直接的构造函数(即它们是从 Document 对象创建的),所以这种技术也不起作用。
我想知道是否有人可以 a) 推荐一种在不增加 Element 的情况下实现这种效果的优雅方法,或者 b) 提供一个令人信服的理由说明为什么我不应该在这种情况下打破“不要增加内置插件”规则。
非常感谢,贾拉贝克