<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
<script>
var oUl = document.getElementsByTagName("ul")[0];
var fnc = document.getElementsByTagName;
var aLi = fnc.call( oUl, "li" );
console.log( aLi );
</script>
不知道是什么原因!
看着document与Object的关系这个文章,我们从原型链上来捋一下。
document --> HTMLDocument.prototype --> Document.prototype
到这里,在Document.prototype中有一个getElementsByTagName函数,我们调用document.getElementsByTagName其实就是使用的他。oUl --> HTMLUListElement.prototype --> HTMLElement.prototype --> Element.prototype
到这里,在Element.prototype中也有一个getElementsByTagName函数,我们调用oUl.getElementsByTagName其实就是使用的他。这两个函数最然名字都是getElementsByTagName,但是底层封装是不同的。猜测:当你使用dom元素调用document原型链上的getElementsByTagName的时候,检测到对象类型不符,所以抛出了错误。