返回列表

prototype 和 __proto__ 差异

默认分类 2014/06/25 19:58

原文地址:http://blog.segmentfault.com/nightire/1190000000400182

一个对象,它有许多属性,其中有一个属性指向了另外一个对象的原型属性;而后者也有一个属性指向了再另外一个对象的原型属性。这就像一条一环套一环的锁链一样,并且从这条锁链的任何一点寻找下去,最后都能找到链条的起点,即 Object;因此,我们也把这种机制称作:原型链。

现在,我希望统一一下所使用的术语(至少在本文范围内):

函数的 prototype 属性:我们叫它 原型属性 或 原型对象
对象的 __proto__ 属性:我们叫它 原型

例如:

Foo 的原型属性(或原型对象) = Foo.prototype
f 的原型 = f.__proto__

统一术语的原因在于,尽管 Foo.prototype 和 f.proto 是等价的,但是 prototype 和 proto 并不一样。当考虑一个固定的对象时,它的 prototype 是给原型链的下方使用的,而它的 proto 则指向了原型链的上方;因此,一旦我们说“原型属性”或者“原型对象”,那么就暗示着这是给它的子子孙孙们用的,而说“原型”则是暗示这是从它的父辈继承过来的。