原型对象
在 JavaScript 中,除去一部分内建函数,绝大多数的函数都会包含有一个叫做 prototype 的属性,指向原型对象,
基于构造函数创建出来的实例, 都可以共享访问原型对象的属性。
例如我们的 hasOwnProperty, toString ⽅法等其实是 Obejct 原型对象的方法,它可以被任何对象当做⾃⼰的⽅法来使⽤。
hasOwnProperty 用于判断, 某个属性, 是不是自己的 (还是原型链上的)
原型链
在 JavaScript 中,每个对象中都有一个 __proto__ 属性,这个属性指向了当前对象的构造函数的原型。
对象可以通过自身的 __proto__属性与它的构造函数的原型对象连接起来,
而因为它的原型对象也有 __proto__,因此这样就串联形成一个链式结构,也就是我们称为的原型链。
默认原型都是Object的实例,因此默认原型都会包含一个内部指针,指向Object.prototype。拿我们上面的例子通俗一点讲就是,构造函数(Person)创建一个实例(person),实例的原型对象即是构造函数的原型对象(Person.prototype),那么实例的原型(Person.prototype)就是Object对象的一个实例,所以实例的原型(Person.prototype)的原型就是Object.prototype