谈‘原型’

66 阅读1分钟

原型到底是什么呢?

js是一种通过原型实现继承的语言,可以认为js中所有都是对象,在js中原型也是一个对象,通过原型可以实现对象的属性继承,js的对象中都包含了一个prototype的内部属性,这个属性所对应的就是该对象的原型。

prototype作为对象的内部属性,是不能被直接访问的,所以为了方便查看一个对象的原型,Firefox和Chrome内核的js引擎中提供了proto这个非标准的的访问器(ECMA新标准中引入了标准原型访问器Object.getPrototype(object)),原型的主要作用就是为了实现继承与扩展对象。

(隐式原型与显示原型)

(1)每个函数都有一个prototype原型属性,称之为显式原型属性或显式原型

(2)每个实例对象都有一个__proto__原型属性,称之为隐式原型属性或隐式原型

实例对象隐式原型 == 构造函数对象显式原型

介绍下原型链

原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就回去prototype里照这个属性,这个prototype又会有自己的prototype,于是就可能会一直这样找下去,这就是我们常说的原型链的概念。

特点: js对象都是通过引用来传递的,我们创建的每一个新对象实体中并没有一份属于自己的原型副本,当我们修改原型时,与之相关的对象也会继承这一改变。