编程语言
首页 > 编程语言> > javascript-Prototype.js和document.createElement()

javascript-Prototype.js和document.createElement()

作者:互联网

所有
我现在正在学习prototype.js.看起来有些奇怪.例如,下面是我在firebug中运行的代码片段,URL为http://api.prototypejs.org/dom/Element/,因为页面中包含prototype.js.

var el2 = document.createElement('div');
var k=0;
for(var i in el2){ k++};
console.log(k);

结果是262,非常非常奇怪.因为如果我在没有prototype.js的页面中运行相同的代码,则结果为195.我的问题是prototype.js如何影响document.createElement方法.我在prototype.js中查询document.createElement,找不到任何代码,例如document.createElement = function(){}.

谢谢!

解决方法:

根据您发布的代码,您正在遍历元素对象并计算该元素对象上的属性数量.

正如其他张贴者所指出的那样,PrototypeJS向HTMLElement的本机Javascript定义添加了其他方法和属性.

请看一下元素名称空间http://api.prototypejs.org/dom/Element/,其中列出了PrototypeJS添加的所有方法和属性.

编辑更多信息

PrototypeJS如何向元素添加新方法?

首先,您需要了解javascript原型的工作原理-最简单的定义是它是构建对象的蓝图,并且当创建该类型的新对象时,该对象具有该蓝图中定义的所有方法以及所有后续方法.原型链.

原型链的最简单示例

 DIVElement -> HTMLElement -> Object

因此,新的div元素将获取DIVElement原型,HTMLElement原型和Object原型的所有方法.

这也是为什么不建议扩展Object原型的原因,因为所有内容都是从该原型复制的.

因此,PrototypeJS使用新方法扩展了HTMLElement.prototype对象,而该方法在大多数浏览器中都不存在,因此,每当在javascript中创建新HTML元素时,它都会获取PrototypeJS方法的副本.

对于源代码中的特定位置

Object.extend(GLOBAL.Element, {
  extend:     extend,
  addMethods: addMethods
});

这是许多功能检测的结尾,以查看浏览器支持哪些元素等.

标签:javascript,prototypejs
来源: https://codeday.me/bug/20191123/2065135.html