我们知道JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。
原型
每一个对象都有原型
- Array构造的对象原型指向Array.prototype
- Function构造的对象原型指向Function。prototy
- Object构造的对象原型指向Object。prototype
- Object.prototype是所有对象的原型
- Object.prototype的原型为空


原型链
每个被构造出来的对象都有原型,而原型对象也有一个自己的原型对象(_ _ ptoto _ _),层层向上直到一个对象的原型对象为null。 这种通过原型互相连接的起来的形式就叫做原型链。

几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。
尽管这种原型继承通常被认为是JavaScript的弱点之一,但是原型继承模型本身实际上比经典模型更强大。例如,在原型模型的基础上构建经典模型相当简单。