原型链

303 阅读1分钟
 // 在JavaScript中,一共有两种类型的值,原始值和对象值.
// 每个对象都有一个内部属性[[prototype]],我们通常称之为原型.
// 原型的值可以是一个对象,也可以是null.
// 如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链. 

// 访问一个对象的原型可以使用ES5中的
Object.getPrototypeOf()
// 方法,
// 或者ES6中的__proto__属性. 
// 原型链的作用是用来实现继承,比如我们新建一个数组,数组的方法就是从数组的原型上继承而来的。

// 原型链是JavaScript中继承的主要方法。
// 每个构造函数都拥有一个原型对象,
// 函数的原型对象constructor默认指向函数本身,原型对象除了有原型属性外,为了实现继承,还有一个原型链指针proto,
// 该指针指向上一层的原型对象,而上一层的原型对象的结构依然类似,
// 这样利用proto一直指向Object的原型对象上,而Object的原型对象用Object.prototype.proto = null表示原型链的最顶端,
// 如此变形成了javascript的原型链继承,同时也解释了为什么所有的javascript对象都具有Object的基本方法。

// 在prototype上定义的属性方法为所有实例共享,所有实例皆引用到同一个对象,单一实例对原型上的属性进行修改,也会影响到所有其他实例。