码迷,mamicode.com
首页 > Web开发 > 详细

js中的原型与原型链详解

时间:2020-02-19 20:48:14      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:instance   有一个   eof   prot   存储   关系   数据   define   typeof   

js中的原型与原型链详解

记住下面三句话就可以理解原型:

  1. 所有的函数数据类型都天生自带一个属性Prototype(原型)这个属性的值是一个对象,浏览器会默认给他开辟一个堆内存
  2. 在浏览器给prototype开辟的堆内存当中有一个天生自带的属性是constructor,这个属性存储的值是当前函数本身
  3. 每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定他是谁的实例,都是Object的实例)

原型链:如果引用构造函数的实例想要查找某个属性p的话:

  1. 首先会在实例内部属性中找一遍
  2. 接着会在实例.__proto__(构造函数.prototype)中找一遍
  3. 如果实例中还是没有,此时程序不会灰心,它会继续在实例的prototype的.__proto__中寻找,直到寻找到Object.prototype才结束,没有的话返回undefined

这种搜索的轨迹,形似一条长链, 又因prototype在这个游戏规则中充当链接的作用,于是我们把这种实例与原型的链条称作:原型链

判断原型与实例的关系

  1. 第一种是使用 instanceof 操作符, 只要用这个操作符来测试实例(instance)与原型链中出现过的构造函数,结果就会返回true
alert(instance instanceof Object);//true
alert(instance instanceof Father);//true
alert(instance instanceof Son);//true
  1. 使用 isPrototypeOf() 方法, 同样只要是原型链中出现过的原型,isPrototypeOf() 方法就会返回true
alert(Object.prototype.isPrototypeOf(instance));//true
alert(Father.prototype.isPrototypeOf(instance));//true
alert(Son.prototype.isPrototypeOf(instance));//true

js中的原型与原型链详解

标签:instance   有一个   eof   prot   存储   关系   数据   define   typeof   

原文地址:https://www.cnblogs.com/my466879168/p/12332915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!