原型和原型链

prototype (原型 / 原型对象)

       + 定义: **每一个函数天生自带一个属性叫做 prototype,他是一个对象**

       + 只要函数定义好以后,这个 prototype 就出生了

       + 构造函数也是函数,构造函数也有 prototype,我们可以像里面添加一些内容

       + 这个天生自带的 prototype 里面有一个属性叫做 constructor

        => 表示我是哪一个构造函数伴生的原型对象


__proto__(原型链/连接点)

        + 定义: **每一个对象天生自带一个属性,叫做__proto__,指向所属构造函数的prototype**

        + 实例化对象也是一个对象

        + 实例化对象也有__proto__属性


原型链

对象访问机制

       + 当你访问一个对象的成员的时候,会先在自己身上找

       + 自己没有去到 __proto__ 上找

       + 再没有,再去 __proto__ 上找

       + 一直找到*对象的 __proto__ 都没有

       + 就返回 undefined

分析:

        + 定义1:每一个对象都有 __proto__

        + 随便一个实例化对象的 __proto__ 是所属构造函数的 prototype

        + 定义2:每一个函数都有一个 prototype,他是一个对象

        + 每一个构造函数的 prototype 应该也有一个 __proto__,指向了谁?

        + 构造函数也是函数,函数也是一个对象

        + 函数应该也有一个 __proto__,指向了谁?

定义:

        1.每一个函数天生自带一个属性叫做 prototype,是一个对象

        2.每一个对象天生自带一个属性叫做 __proto__ 指向所属构造函数的 prototype

        3.当一个对象没有准确的构造函数来实例化的时候,我们都看做是内置构造函数 Object 的实例

例子:

        1.var arr = [] , Array的实例

        2.var obj = {} , Object的实例

        3.var p1 = new Person() , Person的实例

        4.var time = new Date() , Date的实例

        5.var fn = function (){} , Function的实例

        6.Person.prototype , Object的实例

        7.Array.prototype , Object的实例

结论:

        + 任何一个对象开始触发

        + **按照__proto__开始向上查找**

        + 最终都能找到Object.prototype

        + 我们管这个使用 __proto__ 串联起来的对象链状结构,叫做原型链

        + 原型链作用:为了对象访问机制服务

什么是原型,什么是原型链

+ 原型是每一个函数天生自带的对象空间,他在里面写方法是为了给实例使用的,多个实例共享方法

+ 原型链就是使用原型链 __proto__ 串联起来的对象链状结构,是为了对象访问机制服务的

原型和原型链

 

上一篇:js之从原型到原型链


下一篇:js 原型链