@H_4030@JavaScript是一个面向对象语音,即一切皆对象。
@H403_0@那么怎么生成对象?在Java的世界里,对象是由类(Class)实例出来的,通俗地说,就是将事物抽象成一个模具,用这个模具(类)生产出一个个具体的实物(对象)。
@H_4030@可是JS中没有类这个概念,有的是“原型”,对象是由原型衍生出来的。通俗地说,在JS的世界里,“原型”并不是一个模具,而是一个具体的实物(对象)。所有对象都是由另一个对象衍生出来的,而这个被衍生的对象就是所谓的“原型对象”。
@H403_0@在javascript中有三类对象,1用户创建的对象,2构造函数的对象,3原型对象 @H_403_0@这三个对象中每一个类都有一个属性-__proto__属性,它们指向该对象的原型,从任何对象沿用它开始遍历都可以追溯到Object.prototype。 @H_403_0@构造函数都有prototype对象,它指向一个原型对象,通过该构造函数创建对象的时候,被创建的对象的__proto__属性将指向构造函数的prototype属性。 @H_403_0@原型对象有一个constructor属性,该属性指向它对应的构造函数。 @H_403_0@Talk is cheap,show me the code! 咱们来看看代码:
null
@H_403_0@结果是null,说明已经到了顶层原型对象。obj是用大括号{}定义的,obj的原型对象自然是JS的顶层对象。
@H_403_0@咱们再看一端代码,加强下理解:
- subChild.__proto__ --> child
- child.__proto__ --> parent
- parent.__proto__ --> 顶层原型对象