JS原型从0到深理解

1 篇文章 0 订阅
1 篇文章 0 订阅

JS原型与原型链

原型

1.什么是原型?究竟是个啥玩意。我giao,查来查去发现,原型其实是原型对象的简称。

我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象(这个对象就是该函数的原型对象)。
打个比方,我们创建一个函数A(就是声明一个函数), 那么浏览器就会在内存中创建一个对象B,而且每个函数都默认会有一个属性 prototype 指向了这个对象( 即:prototype的属性的值是这个对象 )。这个对象B就是函数A的原型对象,简称函数的原型。这个原型对象B 默认会有一个属性 constructor 指向了这个函数A ( 意思就是说:constructor属性的值是函数A )。

我们来简单测试一下:

 <script>
    function fnA(){
    }
    console.log(fnA.prototype);
    </script>

我们创建一个空的函数fnA,并打印一下它的prototype.
在这里插入图片描述

呦西给给,是不是验证了我们所说的,这个prototytpe是在函数创建时自动生成的同时指向原型函数,它里面存在constructor属性,同时它又指向fnA。就是下面这幅图这样的指向关系。
在这里插入图片描述
2.显示原型和隐式原型
在了解了基本的什么是原型以后,我们再来看一下什么是显示原型和隐式原型。只需要分别理解以下几句话就可以了。
第一句话:每一个函数function都有一个prototyp,即显示原型,默认指向原型函数。这个与我们上面的没什么区别
第二句话:每个实例对象都有一个__proto__(注意是每个下划线是两个_构成),可称为隐式原型,切记是实例化的对象。

 <script>
    function fnA(){  
    }
    console.log(fnA.__proto__);
    </script>

在这里插入图片描述
不难看出,如果没有实例化对象,这个属性是不存在的。

<script>
    function fnA(){  
    }
    var fn=new fnA();
    console.log(fn.__proto__);
</script>

在这里插入图片描述
而一旦实例化以后,实例化对象则会具有这个属性。
第三句话:对象的隐式原型的值为其对应的构造函数显示原型的值

 <script>
    function fnA(){  
    }
    var fn=new fnA();
    console.log(fn.__proto__===fnA.prototype);
    </script>

在这里插入图片描述
呦西,没有毛病。

最后最后,我们通过一段代码,去深入分析一下,内存中的具体操作
在这里插入图片描述

看懂这个图片,你的原型应该就理解的比较深入了,如果有看不到,欢迎关注我,一起交流。(随时在线)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值