- JS是一个非常有魅力的语言也是一个比较烦人的语言,主要就是因为他的特殊性灵活性。
JS的原型链,需要深刻的研究才能搞懂。不要纠结细节吧。实在不行就按这个死背住,慢慢就理解了。总之吧就是一句话万物皆对象。
结合这个图示仔细理解吧。在你搞懂后你会发现。很嗨很刺激!
下面是必须记住的点。基础知识不用说了吧。
对象都是通过函数(即构造函数)创建的。
函数也是一个对象,即属性的集合,所以也可以对函数进行自定义属性。
每个函数默认的有一个prototype属性。
这个prototype的属性值是一个对象,默认的只有一个construct属性指向函数本身。
每个对象都有一个隐藏的属性——“__proto__”,这个属性引用了创建这个对象的函数的prototype。即:fn.__proto__ === Fn.prototype
这里的"__proto__"成为“隐式原型”。
对象的construct属性指向构造函数。而构造函数的construct属性指向自身。
回答什么是JS的原型链?
访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。这个对象的__proto__等于这个对象构造方法的prototype。这个对象的构造函数的prototype是一个对象。 这个对象是被Object()创建出来的。(Object()是JS内部定义好的。) 所以它的__proto__就等于Object.prototype。Object.prototype等于null。到此就是原型链的终结。
然后呢还有一个点。
函数可以是一个普通函数也可以作为构造函数去创建对象。 当这个时候构造函数就和Object()函数是一个作用:作为构造函数去生成对象。
普通构造函数和Object一样的 他既是函数也是对象。他的__proto__指向于Function.prototype。这也是JS内部定义好的。Function.__proto__指向Function.prototype有点鸡生蛋蛋生鸡的意思(Function是被自己创建的)。这里是一个循环引用。 Function.prototype也是一个对象,他的__proto__指向于Object.prototype。Object.prototype等于null。走到原型链的终结。
以上就是我对JS原型链的理解,有什么错误的地方希望大家指出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。