原型链、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