我们学习JavaScript的时候,大家都学过一些关于原型链的东西。 但是,在很多情况下,学习原型链会有很多疑问,是半吊子还是一头雾水。 很难清楚地知道原型链是什么。
prototype和contructor
。prototype指向函数的原型对象。 这是只有函数才有的显式原型属性。 构造函数,其构造函数指向原型对象。
下面的示例考虑打印结果分别指向谁
函数foo
控制台日志(foo.prototype )。
控制台日志(foo.prototype.constructor )。
控制台日志(foo._ _ proto _ ) )
让我们来看看console.log (foo.prototype._ _ proto _ _ )每个构造函数与自己的原型对象之间的关系。
网络照片有侵害的话请告诉我
proto
每个对象都有_proto_。 这是一个隐式原型属性,是指创建对象的构造函数的原型。 因为js是一个没有类的概念,所以为了实现继承,可以通过用_proto_将对象与原型联系起来构成原型链,从而允许对象访问自己的属性。
函数和对象之间的关系
网络照片有侵害的话请告诉我
Foo、Function和Object都是函数,_proto_都是指Function.prototype。
原型对象之间的关系
网络照片有侵害的话请告诉我
所有这些_proto_都指向Object.prototype。 js原型链最终指向一个对象原型对象
_proto_原型链图
网络照片有侵害的话请告诉我
_proto_原型链图
网络照片有侵害的话请告诉我
如果看了上面的图表,应该就能很容易地理解js原型链的相关原理了。
总结
函数和对象是两个函数。 proto将对象和原型连接起来构成了原型链。 所有函数的proto都指向函数原型对象。 js的原型链最终指向Object原型对象(Object.prototype ) (在此排除空值)。 我想指出的是,如果xbdy函数直接更改属性,则函数的所有proto都指向函数原型对象,而在new中直接更改则不指向函数原型对象。
网络照片有侵害的话请告诉我
请参阅来源:
谢谢: https://juejin.im/post/6844903936365690894