原型,原型链个人理解

原型

在这里插入图片描述
person里面没有introduce(),那为什么还会在person多出这个方法呢?
其实introduce()是在__proto__里面,这个是Chrome浏览器根据ES5标准,名字定义为[[Prototype]],两者意义相同,均表示对象的内部属性,其值指向对象原型,这个属性每个对象都有。
我们将__proto__称作隐式原型,当我们在对象上找一个属性或者方法时,在当前对象找到不到,那么就会去__proto__上查找,如果在隐式原型上找到属性或者方法时,就会访问调用。对于隐式原型,可以通过person.__proto__来访问

刚才通过new 实例化出对象 person,在person.__proto__可以访问其原型,然而我们通过Person.prototype也可以访问其原型,我们称prototype为显式原型,通过比较
在这里插入图片描述
可以发现显式原型和隐式原型都指向同一个对象。

原型链

在这里插入图片描述
在stu对象中没有eat(),所以要去其原型上去找,在原型上没有run(),则又去原型的原型上去找,这样行程一个链,称为原型链,其查找的顺序为:当前实例–>实例的原型–>原型的原型…,也可以理解成从父对象去找,父对象没有,再去父对象的父对象里找…直到null,即原型链.

prototype和__proto__联系

  1. prototype__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象;
  2. 任意一个构造函数实例化的对象,都有一个__proto__对象,它指向构造函数的原型对象.

prototype和__proto__区别

  1. prototype是函数独有的,而__proto__是每个对象都会拥有的(包括函数)
  2. prototype的作用是保存所有实例公共的属性和方法;__proto__的作用是当访问一个对象的属性时,如果内部没有该属性,就会在它的__proto__属性所指的那个父对象去找,父对象没有,再去父对象的父对象里找…直到null,即原型链.
  3. prototype还有一个constractor属性,指向该对象的构造函数本身.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值