美文网首页
原型和原型链

原型和原型链

作者: 馋中解禅 | 来源:发表于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