图解原型和原型链

Constructor 构造函数
首先先写一个构造函数 Person,构造函数一般为了区别普通函数要求首字母大写:

function Person(){} 

prototype 原型
原型指的就是一个对象,实例“继承”那个对象的属性。在原型上定义的属性,通过“继承”,实例也拥有了这个属性。“继承”这个行为是在 new 操作符内部实现的。
先不说实例,原型与构造函数的关系就是,构造函数(Person)内部有一个名为 prototype 的属性,通过这个属性就能访问到原型:
在这里插入图片描述
instance 实例

function Person(){}
let person =new Person()// new出来的实例对象 instance 
function Person(){}
let person =new Person()
//在原型上定义属性,可以被new出来的实例对象继承
Person.prototype.name="张三"
console.log(person.name);//张三

proto 隐式原型
实例通过 proto 访问到原型,所以如果是实例,那么就可以通过这个属性直接访问到原型:
在这里插入图片描述
所以这两者是等价的:

function Person(){}
let person =new Person()
//在原型上定义属性,可以被new出来的实例对象继承
Person.prototype.name="张三"
console.log(person.name);//张三
console.log(person.__proto__ === Person.prototype);//true

constructor 构造函数
既然构造函数通过 prototype 来访问到原型,那么原型也应该能够通过某种途径访问到构造函数,这就是 constructor:

function Person(){}
let person =new Person()
//在原型上定义属性,可以被new出来的实例对象继承
Person.prototype.name="张三"
console.log(person.name);//张三
console.log(person.__proto__ === Person.prototype);//true
//constructor 构造函数
console.log(Person.prototype.constructor==Person);//true

因此两者的关系应该是这样:
在这里插入图片描述
原型链
原型同样也可以通过 proto 访问到原型的原型,比方说这里有个构造函数 Person 然后“继承”前者的有一个构造函数 People,然后 new People 得到实例 p
当访问 p 中的一个非自有属性的时候,就会通过 proto 作为桥梁连接起来的一系列原型、原型的原型、原型的原型的原型直到 Object 构造函数为止。
这个搜索的过程形成的链状关系就是原型链
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值