JavaScript 原型链
JavaScript 中,万物皆对象(一种属性的集合)。
每个对象都有着它的原型。当调用一个方法,属性时,会首先在当前对象查找,查不到就查询对象原型,再查对象原型的原型,如此重复,直到最顶层返回 undefined
。
原型链是通过 [[Prototype]]
属性实现的,就像一条链表一样,每个对象的 [[Prototype]]
属性会指向它的原型。最终指向 null
以结束。
就像这样: child --[[Prototype]] --> father -- [[Prototype]] --> parent -- [[Prototype]] --> null
。
比如我想在你的家族中找一个人,我知道他的特征(属性),我问你有这个特征吗?你说你没有(没有这个属性),于是我就去找你的父亲(你的原型)问,他也没有,我就需要去问你的爷爷(原型的原型),太爷爷(原型的原型的原型)如此重复,直到确定你家族里没有人有这个特征。(返回 undefined
)。
继承
我们可以通过修改原型来让对象获得方法。
比如 Array.prototype.rotate
可以为数组对象增加一个 rotate
方法。使用时是这样的 [1,2,3,4,5,6].rotate()
。
定义在原型上的属性会影响到后续对象。
比如你的祖先姓王,那么不出意外的话你也是姓王。祖先是黑发黑瞳,你也应该是黑发黑瞳。
所以如果非必要,那么就不要去修改原型。否则可能会带来意外的情况。
比如原本某人是一个富二代,结果突然发现他其实是被收养的,现在亲生父母来认亲了。如果他认了,就意味着要告别富二代生活(修改原型链导致的影响)。他不认,那么一切正常(不修改原型链)。
JavaScript 原型链
http://localhost:8080/archives/javascript-yuan-xing-lian