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

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

答案:

每个函数都拥有一个prototype属性,每个函数实例对象都拥有一个__proto__属性,而这个属性指向了函数的prototype,当我们访问实例对象的属性或者方法时,会先从自身构造函数中查找,如果没有就通过__proto__去原型中查找,这个查找的过程我们称之为原型链。(跟作用域链有点像)

// 定义动物 - 父类function Animal(){    this.age = 10;    this.say = function(){        return 'hello tom';    }}// 定义猫 - 子类function Cat(){    this.name = 'tom';}// 通过原型继承动物类Cat.prototype = new Animal()// 实例化一个cat对象var cat = new Cat();// 打印返回truecat.__proto__ === Cat.prototype// 打印age,会先查找cat,再查找Animalconsole.log(cat.age)

通过截图,我们可以看到cat实例对象__proto__指向了Animal,当cat没有age的时候,会通过__proto__到原型上查找,如果原型上依然没有,会继续向Object上查找。

 

详细解析:

原型的概念:每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型。

每个函数都有一个prototype属性,这个属性指向函数的原型对象。

每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。

每个原型都有一个constructor属性,指向该关联的构造函数。

原型对象就是通过 Object 构造函数生成的,结合之前所讲,实例的 __proto__ 指向构造函数的 prototype。

Object.prototype.__proto__ 的值为 null 跟 Object.prototype 没有原型,表达了一个意思。

图中由相互关联的原型组成的链状结构就是原型链,也就是蓝色的这条线。

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

你可能感兴趣的文章
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>