什么是原型和原型链
假设有一个普通对象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
继承了Object
a
是Object
的间接实例,a拥有Object.prototype
的属性- 这样一来,
a
既拥有Array.prototype
的属性,又拥有Object.prototype
的属性。