当前位置: 首页 > Web前端 > HTML5

JS原型链的理解

时间:2023-04-05 01:06:25 HTML5

-JS是一个非常吸引人的语言,也是一个比较讨厌的语言,主要是因为它的特殊性和灵活性。JS的原型链需要深入研究才能理解。不要被细节所困。实在不行就坚持下去,慢慢体会。总之就是一句话万物皆对象。让我们仔细理解这张图。当你弄清楚时,你会发现。很高很刺激!以下是必须记住的要点。基本不用说了。对象是通过函数(即构造函数)创建的。函数也是一个对象,也就是一个属性的集合,所以你也可以为函数定义自定义的属性。默认情况下,每个函数都有一个原型属性。这个原型的属性值是一个对象,默认只有一个构造属性指向函数本身。每个对象都有一个隐藏属性——“__proto__”,它指的是创建该对象的函数的原型。即:fn.__proto__===Fn.prototype"__proto__"在这里成为“隐式原型”。对象的构造属性指向构造函数。构造函数的construct属性指向自身。答JS的原型链是什么?在访问对象的属性时,首先在基本属性中查找,如果没有,则沿着__proto__链查找,也就是原型链。这个对象的__proto__等于对象的构造方法的原型。这个对象的构造函数的原型是一个对象。该对象由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原型链的理解。如有错误,希望大家指出。