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;

浙公网安备 33010602011771号