首先声明,一些内容基于个人猜测,如果哪里有错误,请立即联系在下!

我们用js操作Dom时,会经常用到一些个方法比如基于获取到的元素选择其子元素:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<style type="text/css">
#box{
height: 100px;
background: deepskyblue;
}
#box div{
width: 100px;
height: 100px;
background: deeppink;
}
</style>
</head>
<body>
<div id="box">
<div>innerDiv</div>
</div>
<script type="text/javascript">
var oBox=document.getElementById('box');
var iBox=oBox.getElementsByTagName('div');
for(var i=0;i<iBox.length;i++){
iBox[i].onclick=function() {
console.log(this)
}
}
</script>
</body>
</html>

为什么oBox会有getElementsByTagName方法呢?答案很简单,跟js中的继承一模一样,通过_proto_指向prototype继承而来。

下面来捋一捋这些继承的关系;用到的工具就是console.dir;console是window下的一个对象,这个dir方法可以显示对象的所有属性和方法

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title</title>
<style type="text/css">
.ta{
width: 100%;
margin:0 auto;
border-collapse: collapse;
}
.ta td{
padding: 5px;
text-align: center;
word-break: break-all;
border: 1px solid skyblue; }
.ta td:first-child{
width: 40%;
}
</style>
<script type="text/javascript">
window.onload=function(){
var str='a><abbr><acronym><address><applet><area><article><aside><audio><b><base><basefont><bdi><bdo><big><blockquote><br><button><canvas><caption><center><cite><code><col><colgroup><command><datalist><dd><del><details><dir><div><dfn><dialog><dl><dt><em><embed><fieldset><figcaption><figure><font><footer><form><frame><frameset><h1><h6><header><hr><i><iframe><img><input><ins><isindex><kbd><keygen><label><legend><li><link><map><mark><menu><menuitem><meter><nav><noframes><noscript><object><ol><optgroup><option><output><p><param><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><small><source><span><strike><strong><sub><summary><sup><table><tbody><td><textarea><tfoot><th><thead><time><tr><track><tt><u><ul><var><video><wbr><xmp';
var arr=str.split('><');
var tableInnerHtml=(function (a) {
var tmp={};var tmpStr='<tr><td>标签名</td><td>继承关系</td></tr>';
for(let i=0;i<a.length;i++){
var ele=document.createElement(a[i]);
var tempStr=s(ele).slice(3,ele.length);
if(tempStr!==''){
if(!tmp[tempStr]){
tmp[tempStr]=a[i];
}else{
tmp[tempStr]+='/'+a[i];
}
}
};
for(var k in tmp){
tmpStr+='<tr><td>'+tmp[k]+'</td><td>'+k+'</td></tr>';
}
return tmpStr;
})(arr);
var tab=document.createElement('table');
var tBody=document.createElement('tbody');
tab.className='ta';
tBody.innerHTML=tableInnerHtml;
tab.appendChild(tBody);
document.body.appendChild(tab);
}
function s(e){
var str='';
if(e.__proto__){
str+=" > "+e.__proto__.constructor.name;
return str+=s(e.__proto__);
}else{
return str;
}
}
</script> </head>
<body>
</body>
</html>

copy一下上面代码执行一下就能看到对应dom元素的继承关系,这样我们就可以知道有些dom元素上并没有的方法从哪里来的了。

我这里只写了一些dom元素的继承关系;

其他的如document的继承关系可以自己看看 :

HTMLDocument> Document> Node > EventTarget > Object;

如有问题,欢迎指出。

最新文章

  1. memcache的lru删除机制
  2. SQL Server数据库大型应用解决方案总结(转载)
  3. 转-CSS3 圆角(border-radius)
  4. Oracle Order Management DropShip Flow for R12
  5. http server v0.1_http_webapp.c
  6. Android中的Menu
  7. 使用 Cordova+Visual Studio 创建跨平台移动应用(1)
  8. 手把手教你做个AR涂涂乐
  9. 遇到的Mysql的一个坑
  10. 快了快了,你的 MacBook Pro 和 FineUICore!
  11. openstack-ocata-仪表盘服务6
  12. 复习java逻辑---实现猜数字游戏
  13. 关于VMware虚拟机安装镜像时黑屏的解决办法
  14. 一个CSS值转REM的Sublime Text插件
  15. Mike and strings 798B
  16. 第八周PSP(11.5--11.9)
  17. xShell终端中文乱码完全解决方法
  18. 【校招面试 之 C/C++】第18题 C++ 中的隐式转换以及explicit关键字
  19. 合成冷色黑暗恐怖魔法师图片的PS教程
  20. chrome审查元素功能,web开发强大帮手

热门文章

  1. 游戏机制(Machinations)在线演示工具
  2. Leetcode: Convex Polygon
  3. 改变this指针的apply,call,bind的区别
  4. Nodejs&amp;express+mongodb完成简单用户登录(即Nodejs入门)
  5. CentOs中yum安装LAMP+PHPMYADMIN
  6. css设置图片的透明度
  7. c#中按键小技巧
  8. github创建文件夹
  9. 利用 Serial Over Lan(SOL)搭建 XEN 的调试信息输出环境
  10. 运用node的文件系统模块批量修改文件名