原型链、constructor和prototype图文详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型链、constructor和prototype图文详解相关的知识,希望对你有一定的参考价值。

参考技术A 当构造函数return的是一个对象,那么将不会使用Book1构造函数,而是使用Object构造函数来实例化book1对象。
对象实例化,其实就是将构造函数的方法和属性拷贝一份,并生成 __proto__ 隐式原型属性,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。

当构造函数return的是一个变量或者常量,那么使用Book2构造函数来实例化对象,并使用__proto__来访问Book2和Object的原型对象方法和属性。

当构造函数中,那么使用Book3构造函数来实例化对象,并使用__proto__来访问Book3和Object的原型对象方法和属性。

javascript中我们在定义构造函数的时候就会默认有一个prototype的属性。每个对象实例化后其实就是拷贝构造函数中除开prototype属性之外的所有方法和属性,其中会生成一个__proto__属性。
__proto__属性:
1、__proto__属性指向实例化对象的构造函数的prototype属性对应的所有方法和属性
2、__proto__属性的construtor属性指向实例化对象的构造函数

由于实例对象可以继承原型对象的属性,所以实例对象也拥有constructor属性,同样指向原型对象对应的构造函数

一张图理解prototype、proto和constructor的三角关系

原型链

个人理解

1.实例的_ _proto_ _和构造函数的prototype都指向原型,原型的constructor指向构造函数。

2.当调用属性或者方法时,如果对象本身不存在时,就会去构造函数的prototype中去寻找,如果没有就去Object.prototype(Foo.prototype._ _ proto _ _,由于构造函数的prototype也是一个对象,所以也会有_ _proto_ _)寻找,最后Object.prototype的_ _proto_ _会为null。

 

实例——>构造函数.prototype——>Object.prototype——>null

以上是关于原型链、constructor和prototype图文详解的主要内容,如果未能解决你的问题,请参考以下文章

原型prototype原型链__proto__构造器constructor

原型链之prototype/__proto__/constructor

23.JavaScript原型和原型链

原型 原型链和对象是怎么实现继承的

原型,原型对象,原型链,构造函数,继承

原型和原型链的扯淡