博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我所理解的原型&原型链
阅读量:6445 次
发布时间:2019-06-23

本文共 1241 字,大约阅读时间需要 4 分钟。

一、题目

我们先看一道题目

var F = function() {};       Object.prototype.a = function() {        console.log('a');    };    Function.prototype.b = function() {        console.log('b');    }    var f = new F();    f.a();     f.b();        F.a();     F.b();

二、解题关键

借用网络上的图片,看起来有点绕,待我们一点一点理解。有以下几点:

三、图片解析

  • __proto__ 是原型链的链接
  • 通过 __proto__ 查找到prototypeprototype是原型的关键字
  • var f = new F()
    f: 是实例对象
    F: 是构造函数
    f通过__proto__ 找到F.prototype,所以f.__proto__ === F.prototype
  • 构造器的原型属于对象 Object ,也就是说 F.prototypenew object 出来的。所以 F.prototype通过 __proto__ 可以找到 Object.prototype
    即:F.prototype.__proto__ === Object.Prototype
  • function Function() 是函数构造器
    Function.__proto__ === Function.prototype
    Function.prototype 是对象,所以Function.prototype.__proto__ === Object.prototype
  • 终极:Objecy.prototype.__proto__ === null

四、题目解析

再回过头来看上面的题目

  • f.a(),f 是实例对象, f没有a属性,通过f.__proto__找到原型F.prototypeF.prototype上也没有a属性,继续通过 F.prototype.__proto__找到Object.prototype,发现a属性,所以输出a
  • f.b(),同理找到 Object.prototype,发现Object.prototype也没有b属性,继续通过__proto__查找 到了null,所以b函数不存在,浏览器报错。 则 F.a(),F.b()也不会执行
  • 若注释了 f.b(),执行F.a()。F是函数,F上没有a属性,通过__proto__找到Function.prototype,发现Function.prototype没有a属性,继续通过__proto__,找到Object.prototype,找到了a属性,输出a
  • 若注释了 f.b(),执行F.b()。同理找到Function.prototype,发现b属性,输出b

五、参考资料

如果有理解不对的地方,欢迎大佬指正!

转载地址:http://xzvwo.baihongyu.com/

你可能感兴趣的文章
hdu 3501 Calculation 2 (欧拉函数)
查看>>
可以免费下载视频素材和模板网站汇总
查看>>
生成包含数字和大小写字母的随机码
查看>>
Spring quartz 单机、集群+websocket集群实现文本、图片、声音、文件下载及推送、接收及显示...
查看>>
SPOJ104 Highways,跨越数
查看>>
使用rman备份异机恢复数据库
查看>>
Win7-64bit系统下安装mysql的ODBC驱动
查看>>
自己做一款简易的chrome扩展--清除页面广告
查看>>
node中非常重要的process对象,Child Process模块
查看>>
Webserver管理系列:3、Windows Update
查看>>
Linux内核源码详解——命令篇之iostat[zz]
查看>>
Sqlserver2000联系Oracle11G数据库进行实时数据的同步
查看>>
duplicate命令创建physical standby数据库报RMAN-03015 ORA-17628
查看>>
明年计划
查看>>
ORACLE功能GREATEST功能说明具体实例
查看>>
unity, particle play once and destroy
查看>>
hadoop job解决大数据量关联时数据倾斜的一种办法
查看>>
windows配置nginx实现负载均衡集群
查看>>
摄像机知识
查看>>
小tip:纯CSS让overflow:auto页面滚动条出现时不跳动
查看>>