浅述Javascript的原型

122 阅读1分钟

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

原型

每一个对象都有原型

  • Array构造的对象原型指向Array.prototype
  • Function构造的对象原型指向Function。prototy
  • Object构造的对象原型指向Object。prototype
  • Object.prototype是所有对象的原型
  • Object.prototype的原型为空

举一个例子

(这里需要注意的一点就是伪数组,伪数组的原型指向不是Array.prototype而是Object.prototype)

原型链

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

几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。

尽管这种原型继承通常被认为是JavaScript的弱点之一,但是原型继承模型本身实际上比经典模型更强大。例如,在原型模型的基础上构建经典模型相当简单。