彻底理解prototype和__proto__、constructor

首先看一段代码,定义一个构造函数Parent 和 Child, new一下Child构造函数创造出实例对象child1.
在这里插入图片描述
然后
在这里插入图片描述
在这里插入图片描述
这里说明实例是个对象,一定要注意

prototype:

prototype属性也叫原型对象,主要是为了实现继承和共享属性;
可以说我们的每一次编程,内在都有原型对象来发挥着作用,如果你没有掌握原型对象的含义,那么你的js还没有真正的入门!
这里记住:对象分为函数对象普通对象;除函数对象之外的对象全部是普通对象!
只有函数对象才具有prototype属性!;而系统内置的函数对象有:
Function,Object,Array,String,Number
在这里插入图片描述
在这里插入图片描述

proto

所有的对象obj都具有proto属性(null和undefined除外),可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型也就是指向该构造函数的prototype属性

constructor

构造器,谁创造了该函数,就有该函数的constructor指向构造者!

看完不理解没关系,接着看代码:
在这里插入图片描述

由于child1为一个实例对象,对象!是没有peototype属性的!,所以为undefined!
而child1实例对象的__proto__方法打印出来了一个对象,由于是Child创造了child1,所以child1的构造者是Child,也就是指向了Child函数;由于child1为一个对象,那么它的__proto__自然指向Object。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为Child为构造函数,所以它的__proto__指向者自然是函数;ƒ () { [native code] } 是什么?
native code 的意思是它是程序自带的,是二进制编译的无法显示出来代码, 这里简单了解即可,反正知道是个函数就可以了,不过一般来说,只有实例对象才调用__proto__去寻找原型,但是所有的对象都是有这个属性的!
然后可以看到Child打印的原型对象,要了解原型对象,首先要知道原型对象是怎么创造出来的:
在这里插入图片描述
这里也可以知道,为什么prototype是一个对象,是因为在创造的过程中是通过new Object,是作为Object的一个实例创建的;最重要的是:可以看出Child.prototype指向的是Child的一个实例,实例在这里是temp,所有temp是由Chil创造出来的,所以temp(也就是Child.prototype)的构造者是function Child();
而Parent与Child的不同不过是加了个getName方法而已

这里可以再补充一下:一般来说,peototype都是属于普通对象,但是Function的prototype是函数对象,原因是什么呢:
可以看一下Function的prototype的创建过程:可以看出,Function的创建实例是个anonymous function!所以说它的prototype是函数对象
在这里插入图片描述

接着看:
在这里插入图片描述
在这里插入图片描述
在这里相信就比较容易理解了,Child.prototype指向的是一个Child实例对象,其__proto__为Object,而根据__proto__指针指向的是prototype属性,所以可以看到 Child.prototype.proto ===Object.prototype!

下面再看一下Function:说明到达了原型链的最顶端!
在这里插入图片描述
在这里插入图片描述
构造器的话:构造Child的是Function,构造Child.prototype的是Child,这个现在应该很好理解了.
在这里插入图片描述
此外
在这里插入图片描述
文章参考自:https://www.h5w3.com/44891.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值