美文网首页
原型和原型链

原型和原型链

作者: 馋中解禅 | 来源:发表于2017-05-07 21:50 被阅读0次

    1.静态变量和函数

    • 当定义一个函数后通过“.”为其添加的属性和函数,通过对象本身依然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数;反之称为实例变量和函数

    2.原型

    1. 每个对象都有一个内部属性prototype,我们称之为原型。
    2. 原型的值可以是一个对象,也可以是null。
    3. 如果它的值是一个对象,则这个对象也有自己的原型,于是形成了原型链。
    4. 使用原型的好处是可以让对象实例共享它所包含的属性和方法。
    5. 当调用构造函数创建一个实例的时候,实例内部将包含一个内部指针(_proto_)指向构造函数的prototype。
    6. Function是一个函数对象,但它有点特殊,它的原型就是一个function空函数。
    7. Array也是一个函数对象,它的原型就是Array.prototype。

    3.原型链

    • 当从一个对象那里调取属性或方法时,如果该对象自身不存在这样的属性或方法,就会去自己关联的prototype对象那里寻找,如果prototype没有,就会去prototype关联的父级prototype那里寻找,如果再没有则继续查找Prototype.Prototype引用的对象,依次类推,直到Prototype为undefined(Object的Prototype就是undefined)从而形成了所谓的“原型链”。

    4.constructor

    • 原型对象prototype中都有个预定义的constructor属性,用来引用它的函数对象

    5._proto_属性和prototype属性的区别

    1. prototype是function对象中专有的属性。
    2. _proto_是普通对象的隐式属性,在new的时候,会指向prototype所指的对象。
    3. _ptoto_实际上是某个实体对象的属性,而prototype则是属于构造函数的属性。

    6.总结

    1. 所有的对象都有_proto_属性,该属性对应该对象的原型。
    2. 所有的函数对象都有prototype属性,该属性的值会被赋值给该函数创建的对象的_proto_属性。
    3. 所有的原型对象都有constructor属性,指向该原型的实例构造函数。
    4. 函数对象和原型对象通过prototype和constructor属性进行相互关联。
    5. 函数都继承于Function函数,对象都继承于Object对象。
    6. 函数Function也是对象Object,Object也有自己的构造函数Function,所以Function和Object是互相创造的。
    7. 原型链的形成是真正是靠_proto_ 而非prototype。

    相关文章

      网友评论

          本文标题:原型和原型链

          本文链接:https://www.haomeiwen.com/subject/yorptxtx.html