原型链与继承

JavaScript内置的继承方法被称为原型对象链,又称为原型对象继承。对于一个对象,因为它继承了它的原型对象的属性,所以它能够访问这些属性。同理,原型对象也是一个对象,它也有自己的原型对象,因此也可以继承它的原型对象的属性。这样环环相扣的过程就叫做原型链。

使用new声明的自定义对象(非Object)的原型对象指向那里,原型对象的原型对象呢

使用new声明的自定义对象(非Object)的 原型对象 指向该自定义对象的构造函数的 原型对象

该自定义对象的构造函数的 原型对象原型对象 指向 Object原型对象,即 Object.prototype

如下图
面试官最喜欢问的原型链_自定义

Object的原型对象的原型对象指向哪里

Object的原型对象的原型对象指向null。null是原型链的最顶层。
面试官最喜欢问的原型链_原型链_02

讲一下__proto__与prototype的区别

构造函数才拥有prototype属性,实例对象只有__proto__属性。

同时它们存在的目的不同。

prototype是显式原型,主要的目的是用来实现基于原型的继承与属性的共享。
__proto__是隐式原型,主要的目的是构成原型链。

我们可以自定义prototype的属性,但是不能自定义__proto__属性。因为__proto__是浏览器实现的。
不建议修改__proto__属性,因为不是所有的平台都支持修改对象原型的特性。