Javascript 我是否正确理解这个Function.prototype.call()代码?

Javascript 我是否正确理解这个Function.prototype.call()代码?,javascript,Javascript,守则: var content = Array.prototype.map.call(document.getElementsByTagName("p"), function(e) { return e.innerHTML; }); 是从p。JavaScript的367:权威指南,第6版 以下是我认为在这段代码中发生的情况。 变量content被赋值为对document.getElementsByTagName(“p”)返回的段落标记的NodeList调用的.map()结果 .map()

守则:

var content = Array.prototype.map.call(document.getElementsByTagName("p"), function(e) {
  return e.innerHTML;
}); 
是从p。JavaScript的367:权威指南,第6版

以下是我认为在这段代码中发生的情况。

变量
content
被赋值为对
document.getElementsByTagName(“p”)
返回的段落标记的
NodeList
调用的
.map()
结果

.map()
方法可从
数组.prototype
访问,其
值使用
.call()
设置为段落标记
节点列表。由于
.map()
应用了一个可以访问
项、索引、数组的函数,因此
函数(e)
中的
e
节点列表的项

因此,
content
变量最终由
.innerHTML
调用当前文档中由段落标记组成的
节点列表中的每个
元素
类型
节点的结果组成

.innerHTML
将返回给定HTML元素的文本(如果该元素中没有其他节点)。否则,它将返回其中的HTML节点

对吗?我试过:

  • 阅读
  • 我在搜索程序员时发现,我不确定如何解释。它声称MDN文档不完整
  • 在权威书籍中阅读更多
  • 在JSFIDLE中胡闹-代码按预期运行,我只想知道它是如何工作的

  • 是的,这就是正在发生的事情

    我只是想挑三拣四:

    .innerHTML
    将返回给定HTML元素的文本(如果该元素中没有其他节点)。否则,它将返回其中的HTML节点

    .innerHTML
    始终返回元素的HTML内容,无论它是否包含子元素。当一个元素不包含子元素时,很难发现它的文本和HTML之间的区别(但是有区别!)

    HTML:

    <div>&lt;</div>
    

    。。。但是前者是首选,因为您不必创建然后一次性使用数组来访问
    map()
    函数。您应该编辑您的帖子,询问发生了什么,并将您的解释放在答案中。了解(a)的返回值不支持数组方法的原因可能也很有趣:
    console.log(document.getElementsByTagName("div")[0].innerHTML); // "&lt;"
    console.log(document.getElementsByTagName("div")[0].textContent); // "<"
    
    var content = [].map.call(document.getElementsByTagName("p"), function(e) { return e.innerHTML; });