什么是原型和原型链
假设有一个普通对象x={ },x有一个隐藏属性__proto__,这个属性会指向Object.prototype,即x.__proto__ === Object.prototype ,此时,Object.prototype就是x的原型。__proto__这个隐藏属性的作用就是指向他的原型。
假设有一个数组对象a=[ ],他也有上面的隐藏属性,此时a.__proto__ === Array.prototype,与此同时,Array.prototype也有隐藏属性,即Array.prototype.__proto__ === Object.prototype
这样,数组a就有两层原型:a的原型是Array.prototype,a原型的原型是Object.prototype,这三者之间通过__proto__这个隐藏属性形成了一个链条
a ===> Array.prototype ===> Object.prototype
这就是原型链
如何创建一条原型链
例如在对象a身上创建一条原型链,达到类似a.__proto__ = ?的效果
object.create
a = Object.create(f)
构造函数
a = new 构造函数()
原型链的作用
在没有class的情况下实现继承
以上面的原型链为例:
a是Array的实例,a拥有Array.prototype的属性Array继承了Objecta是Object的间接实例,a拥有Object.prototype的属性- 这样一来,
a既拥有Array.prototype的属性,又拥有Object.prototype的属性。