怎么理解原型和原型链(prototype,__proto__)

关于原型和原型链,我们需要掌握这句话:

【实例化对象的原型链 指向 构造函数的原型】!!!

概念,prototype是原型的意思,__proto__代表原型链。

现在开始理解:~

1.生成一个构造函数Foo,a是Foo的实例化对象:

function Foo(){
console.log('我是构造函数Foo')
}

let a = new Foo()

那么a.__proto__ = Foo.prototype,对此可通过打印验证,它们果然是一样的:

2.Foo是一个构造函数,它的原型链__proto__ 指向谁呢,当然也指向它的构造函数的原型喽,那Foo是谁的实例化对象呢?需要知道,任何构造函数实质都是一个函数,因此,是函数的实例化对象。

也就是说Foo.__proto__ = Function.prototype,对此基于1中的Foo,可继续通过打印验证,它们果然是一样的:

ps:native code 的意思是它是程序自带的,是二进制编译的无法显示出来代码,这里代表已经追溯到js中的原生方法Function了。

3.那么回到1的结论里,a.__proto__ = Foo.prototype,那么 Foo.prototype的原型链__proto__指向哪里呢?那我们就要理解prototype是谁的实例化对象,就会指向谁的原型喽。

每个构造函数都会自带原型即prototype这个属性,这个属性的值是一个{},里面存储了它的属性和方法,也能看出来这是一个对象格式的数据。没错!你猜对了,prototype正是Object的实例,也就是说Foo.prototype.__proto__指向了Object.prototype,对此呢,我们也可以通过打印验证出来,它们果然是一样的:

So~以上三点,都体现了:实例化对象的原型链(__proto__)指向它的构造函数的原型(prototype)

因此,以后如果再迷茫,什么是原型?什么事原型链?谁指向谁?

我们只要想一下上面这句话,找一找谁(实例)是谁(构造函数)的是实例化对象,即这个实例是哪个构造函数生出来的崽?我们就可以推理出来喽。

ps:个人理解,仅此记录和分享,如有错误,敬请指正QWQ~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值