msdn

关于js中原型链的理解
理解原型链需要先知道3个知识点。1。任何元素都是对象,对象都有_proto__属性(隐式原型,ie不能访问)2。函...
扫描右侧二维码阅读全文
21
2019/11

关于js中原型链的理解

181008793.jpg
理解原型链需要先知道3个知识点。
1。任何元素都是对象,对象都有_proto__属性(隐式原型,ie不能访问)

2。函数也是对象不仅有_proto__属性还有prototype属性(显式原型可以直接访问)

3。_proto_属性指向的是创建包含_proto__实例对象的构造函数的原型对象(如上图所示:per对象中的_proto_指向的是创建per对象的构造函数的原型对象prototype)

介绍一下什么是原型链:原型链其实就是关于实例对象和原型对象的一种层层访问的关系。实例对象通过_proto_访问实例对象的构造函数对象的prototype,比如上面图片中的per可以访问Person.prototype中的属性和方法。

可是Person.prototype也是一个对象(万物皆对象)所以它也有_proto_属性,可以把Person.prototype也看作一个对象(即它也是创建的一个实例对象),它的_proto_属性指向的是创建它的构造函数的prototype原型对象即 Object.prototype ,然而 Object.prototype也是一个对象,它的原型链又是什么呢 其实是空null。这样我们就造成了一个原型链,什么样的原型链呢?总结:创建的实例对象通过_proto_来指向原型对象prototype的一种关系层层向上指向最后到Object再到null。

其中构造函数只是起到了创建实例对象的作用,构造函数中的prototype属性指向构造函数原型对象prototype;构造函数原型对象prototype中的constructor属性指向回了构造函数,与原型链无关。

但是我们同时也知道构造函数也是一个对象,如上述2,所以Person对象的_proto__指向了创建Person对象的构造函数var Person=function Function();的原型对象即Function.prototype,Function.prototype._proto_指向了Object.prototype。然而因为var Function=new Function();所以Function._proto_指向的是自己Function.prototype。

1.如下是实例对象和构造函数原型对象的原型链

var f=new Person(); f._proto_----Person.prototype Person.prototype ._proto_----Object.prototype Object.prototype ._proto_-----null
2.如下是div的原型链:
1546396797.jpg
3.如下是函数对象的原型链

var f=new Person(); Person ._proto_ -----Function.prototype Function.._proto_ ------Function.prototype

Last modification:December 19th, 2019 at 09:24 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment