Javascript 原型与原型链
在javascript 中实现继承是通过原型的方式实现的,不管是通过构造函数的方法创建的对象还是通过class 类的方式创建的对象,在它们身上都有一个与之对应的原型就是
prototype。然后这个 prototype原型是以属性的方式存在 就是 Object.prototype 。然后这个 prototype 它又是个对象 ,通过这个 prototype 可以获取到 该对象中的方法。
通过new 这个对象 拿到对应的实例对象。然后 实例对象身上存在一个隐式实例对象是 .__proto__ 这个 __proto__ 只要用new 关键字创建的实例对象身上都存在。
然后这个 实例对象.__proto__ 正好等于 上面创建的对象的prototype 。 也就是 xxx.__proto__ === XXXObject.prototype。 下面通过代码解读一下:




通过上面打印得知,实例对象上也有隐式对象__proto__ ,又指向它父类的 原型对象。


通过上面打印得知 这个Niuma继承了People 对象。 再通过它身上的原型对象 点上 __proto__ 可以指向 People.prototype 。可以知道它们之间实现继承实际上是内部通过隐式对象__proto__的指向的父类。可以得出 对象的原型对象上都有个 __proto__ ,然后这个__proto__ 指向它继承的父类. People.prototype.__proto__ 又指向 Object.prototype. 由于Object是JS 内置对象所以Object.prototype.__proto__ 最终等于 null。 在JS中 通过原型对象和 指针__proto__ 这样一直向上查找的过程被称为原型链。
ES6 新增的constructor 是 这个自身的一个属性。这个属性指向它本身。 通过代码解释下。

完结。
总结。
JS 中通过原型的方式实现继承。是通过内部内置的隐式对象__proto__ 实现的。每个通过构造函数或class类创建的对象身上都有一个原型 prototype 。这个 prototype 又是个对象 所以又叫 ‘原型对象’。就这样。

浙公网安备 33010602011771号