原型对象与原型链

1、什么是原型对象?

举个很好理解的例子:爱迪生发明电灯泡先画图纸

按照图纸尝试制作电灯泡,也许失败继续画新图纸……成功制作了电灯泡

灯泡图纸  第一个电灯泡 

爱迪生带着灯泡图纸 ,搭建了 灯泡工厂 ,灯泡产品才批量生产,并进入千家万户

灯泡图纸记录了灯泡的相关信息 由爱迪生实验室产生的 不是灯泡工厂中产生的

灯泡工厂就好比产生对象的 构造器/类

灯泡产品: 就好比由构造器实例化出来的对象

灯泡产品是根据灯泡图纸制作的

灯泡产品是由工厂制作的不是由图纸制作的

图纸由爱迪生实验室中产生的 不是工厂中产生的。

2、构造器访问原型对象

可以相定义函数一样定义构造器

例如:function Light(){

      this.price=20;

        }

这样就相当于定义了一个构造器。构造器.prototype可以访问原型对象

3、普通对象可以访问原型对象

普通对象.__proto__访问原型对象

例如:先通过2例子的构造器创建一个普通对象

    var li=new Light();

    li.__proto__;

4、原型对象可以访问构造器

原型对象.constructor 访问构造器

例如:通过3例子的原型对象访问构造器

   li.__proto__.constructor或者Light.prototype.constructor

 

 5、原型示意图

6、原型链示意图

在系统中,原型对象之间就存在这样一种一环扣一环的引用关系

这样的一种一环扣一环的结构就被称为原型链并且这个链条有终点,这个终点就是null

 

 

7、原型链的访问原则

 

 当试图访问一个对象身上的属性时,就会使用原型链访问原则:

1、首先在当前对象身上查找属性,如果有,就直接使用

2、如果没有,就在该对象的原型对象身上继续查找该属性,如果有直接使用

3、如果没有,就在原型的原型身上继续查找该属性,如果有直接使用

直到找到原型链的终点(null),依然没有,就返回undefined;

8、原型继承

 

但是你需要注意:如果把数据放在Object{}原型对象上,不但Light对象能访问,甚至字符串和数值也能访问,

所以使用原型链继承时,应该要注意把数据放在原型链的近处,避免数据污染

 

posted @ 2018-11-28 10:29  yunhenX  阅读(287)  评论(0编辑  收藏  举报