关于借用方法中对象,出现非法调用!不知其解?

    <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>

clipboard.png
不知道是什么原因!

阅读 1.9k
1 个回答

看着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的时候,检测到对象类型不符,所以抛出了错误。

推荐问题
宣传栏