【发布时间】:2018-03-20 14:02:29
【问题描述】:
很长时间以来,我使用 jQuery、ReactJS 和 NodeJS 服务器端 (ExpressJS) 用 JavaScript 编写代码。我学习了部分 MDN 和其他资源,但是有一个问题我找不到答案。
为什么跟随代码需要prototype 对象的属性?为什么我不能直接从Array 对象使用forEach?我的意思是,就OOP而言,如果Array类扩展类包含forEach方法,我可以直接从Array实例化的对象中调用它,我不需要,使用反射找到基类,实例化它并调用来自基类的方法。
Array.prototype.forEach.call(document.querySelectorAll('.klasses'), function(el){
el.addEventListener('click', someFunction);
});
示例取自这里:https://www.smashingmagazine.com/2014/01/understanding-javascript-function-prototype-bind/
【问题讨论】:
-
旧版浏览器在 DOM 元素上没有 forEach,事实上我认为 IE11 甚至在 DOM 元素上都没有 forEach .. ps。 DOM 元素不是数组..
-
querySelectorAll不返回数组。它返回一个类似数组的对象,一个 NodeList。 -
如果我使用数组作为
call的第一个参数,我可以省略prototype? -
否 -
call的第一个参数必须是您希望迭代的节点集。 -
不要打扰那个代码,它已经过时了。你今天会写
for (const el of document.querySelectorAll('.klasses')) el.addEventListener('click', someFunction);。
标签: javascript oop