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