原型

原型与原型链很晕,在此个人试着去了解一下:

第一个问题:__proto__ 原型是什么?

首先,创建一个对象a和对象b,设置b的原型(__proto__)指向a

由结果看出,b的原型指向a,如果b对象查找属性a,如果a自身并不存在,会通过原型链向上查找(一直找到跟这里是Object)

另外:因为__proto__ 只是支持浏览器(而且有的没有),所以建议在获取对象原型的时候使用Object.getPrototypeOf(obj)方法获取原型。

还有,通过create方法创建的对象,原型对象会指向源对象。

而assign 只是复制自身属性(不会继承)

因为这里create 创建的是一个真正意义上的空对象(没有原型),所以c只是获得了a对象自身属性的拷贝(并没有获得a对象的原型)

 2.原型与prototype原型对象的关系?prototype 是什么?

首先创建一个对象:

 

可以看出,没有prototype 。说明简单对象是没有的,那么谁有?

 创建了一个函数,可以看出它有prototype 对象。

 

打印出来,指向的是 constructior 构造器对象,构造器对象拥有2个属性,一个是构造函数,一个是原型(原型是都存在的,处处皆对象)

 

在这里,原型指向的是Object 。构造器函数中又拥有自己的属性和方法,并且有prototype 和 __proto__。

再向下深入:

可以看懂构造器函数的原型对象拥有原型和构造器。

 

再看构造器,发现构造器函数始终存在prototype 原型对象和__proto__  原型,那么也就是说只要是函数(存在构造器),那么它就始终存在prototype 和__proto__ 原型。prototype 对象在属性构造对象中的对象属性,而原型与构造器位同级。

 那么原型链(下面个人理解,欢迎大家指正),我们往往指的应该就是__proto__ 链,原型对象prototype 指的是函数对象构造器对象和__proto__原型

成灰之前,抓紧时间做点事!!
原文地址:https://www.cnblogs.com/jony-it/p/10981697.html