Js原型和原型链

 

 上图所示 , 定义的student这个对象有一个__proto__属性(图中是[[Prototype]]同),这个属性叫对象的(隐式原型),它所指向的是构建出这个对象的Student这个类的prototype属性。Student.prototype被称为(显式原型);

 所以在控制台上打印student.__proto__ ===  Student.prototype 会是true 因为前者指向后者。这就是原型的概念。

  原型链:当访问一个对象的属性或者方法时,首先会去从自身找,如果找不到,就会往它的原型上去找,如果原型还是找不到,就会往原型的原型上去找,这样就构成了一条原型链。如上图所示,student的introduce方法自身找不到,所以会去隐式原型上去找,由于隐式原型指向的是Student.prototype,所以可以找到introduce这个方法并且将它执行掉。但是drink这个方法在Student.prototype上找不到,所以又会继续在Student的隐式原型上去找,而Student的隐式原型指向的是它的父类Person,所以此时可以找到drink的方法,将它执行掉。注意:每个对象都有 __proto__ 属性,但只有函数对象才有 prototype 属性。原型链的尽头是null;

 

 

posted @ 2021-11-03 14:47  别动哥的bug  阅读(74)  评论(0)    收藏  举报