Javascript 不处理文件的一般原因';s和元素';s原型

Javascript 不处理文件的一般原因';s和元素';s原型,javascript,prototype,constructor,document,element,Javascript,Prototype,Constructor,Document,Element,是否有不处理文档和元素原型的一般原因 我喜欢创建自己的小框架,因为我当前的项目不需要现有框架的大量功能 我不需要支持不支持元素/文档构造函数的浏览器,也不需要执行不受我控制的脚本 那么,您是建议扩展原型,还是我应该按照通常的方式从元素/文档创建自己的对象?您打算扩展默认的DOM元素吗?如果是,请不要。Juriy Zaytsev(又名Kangax)清楚地描述了为什么不加入。是的,很不幸。如果能够通过修改DOM原型来添加功能,那将是一件好事,但在实践中,考虑到当今的技术,这是不可靠的 文档、元素等可

是否有不处理文档和元素原型的一般原因

我喜欢创建自己的小框架,因为我当前的项目不需要现有框架的大量功能

我不需要支持不支持元素/文档构造函数的浏览器,也不需要执行不受我控制的脚本


那么,您是建议扩展原型,还是我应该按照通常的方式从元素/文档创建自己的对象?

您打算扩展默认的DOM元素吗?如果是,请不要。Juriy Zaytsev(又名Kangax)清楚地描述了为什么不加入。

是的,很不幸。如果能够通过修改DOM原型来添加功能,那将是一件好事,但在实践中,考虑到当今的技术,这是不可靠的

文档
元素
等可能是由浏览器实现的“宿主对象”,无法摆弄其原型。宿主对象可能具有许多本机JavaScript对象所不具备的其他奇怪行为。DOM节点是IE6-7和许多旧的、小众的和移动浏览器中的主机对象

即使它们是作为本机JavaScript对象实现的,也没有(目前)描述在哪里可以找到它们的构造函数的标准,供您在
.prototype
中查找<代码>文档,
元素
等等都只是w3dom接口名称,它们没有说明要找到什么实现对象

现代浏览器(IE8本机模式和最新版本的Firefox、Opera和WebKit)确实提供了构造函数,因此您可以开始向
文档
HTMLElement
添加方法。但即便如此,公开的对象之间也存在差异,因为并非每个浏览器都提供具有相同名称的实现的DOM接口。(节点列表的子接口/实现尤其麻烦。)

通过查看Prototype.js框架,您可以了解DOM原型在实践中是如何工作的。当它工作时,它是超级平滑的。但是因为你不能在任何地方都进行原型化,你最终会遇到一些非常难看的东西,框架必须处理原型化无法工作的地方,将方法复制到节点的每个实例中。然后你会遇到这样的情况,你的代码可能会忘记它需要强制这个“增强”,因此它可能会工作或不工作,这取决于之前是否有其他函数对同一个节点进行了增强。这导致了非常可怕的特定于浏览器的、特定于交互顺序的、易受竞争条件影响的调试痛苦


如果您可以将原型制作工作限制在几个支持良好的界面上,并放弃除最新浏览器以外的所有浏览器,您可能会侥幸成功。

这里真的不清楚您在问什么。我谈论的是Element.prototype和Document.prototype(HTMLDocument.prototype)。如果有的话,不使用它们的原因是什么?没错,这就是我的计划。我可以考虑一些非常特殊的情况,当你不想这样做的时候。例如,调试一些概念验证场景,这些场景永远不会投入生产。所以我发现这个答案没有用。DOM节点仍然是宿主对象,即使浏览器提供了构造函数和原型链。