对JavaScript中原型及原型链的理解

什么是原型:

  1,我们所创建的每一个函数,解析器都会向该函数对象添加一个属性prototype,这个属性指向一个对象,这个对象就是我们所谓的原型对象

  2,如果我们将函数作为普通函数调用时,prototype基本没有任何作用;当函数作为构造函数使用时,构造函数所创建的对象中都会有一个隐含属性,这个隐含属性指向创建它的构建函数的原型对象(好像有点绕……),我们可以通过__proto__来访问该属性

  3,原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象(我们可以将对象中共有的内容,统一设置到原型对象中)

使用方法或者属性时的一个内部查找顺序(有必要知晓):

  (1)当访问一个对象的属性/方法时,首先查找这个对象自身有没有该属性

  (2)如果没有就查找它的原型(也就是__proto__指向的构造函数prototype原型对象)

  (3)如果还没有找到就查找原型对象的原型,就是prototype.__proto__,它应该是指向Object构造函数的原型对象-我理解为原型对象是由Obejct这个构造函数创建的

  (4)依次类推,如果还没有,则它会查找Object构造函数原型的原型,也就是Object构造函数的prototype.__proto__,如果打印它,你会发现它是null

  

原型链:

ps:有没有觉得很像一个链条呢

总结:

  我们这里需要重点知晓的是,原型对象也是对象,是对象就是用构造函数创建出来的,而最终他们都指向Object的构造函数的原型对象的原型对象,也就是null;事实上,我们可以把Object构造函数当做是一切对象的祖先(包括Function构造函数,它的__proto__也是指向Object),还需要知晓Js内部查找属性和方法的一个规则,熟知这些,那么理解原型和原型链就没什么难度了

  嗯嗯……,写的好像有点乱,如果有大佬发现此文中的错误,可以指正出来,毕竟才接触前端没多久,只是个人对原型的一些总结和理解,如果后续有更深入的理解或有更简洁的描述,会再进行补充或修改

猜你喜欢

转载自www.cnblogs.com/xfMeng/p/12771200.html