讲讲js中的prototype和__proto__

在Javascript中,prototype和__proto__是两个重要的概念,在对象的原型链中扮演重要的角色。

prototype

  • prototype是js函数的内置属性,每个函数都有一个prototype属性,它是一个指针,指向一个对象(原型对象)。这个对象包含了所有实例对象(new)的公共属性和方法。
  • 通过修改prototype对象的属性,可以为所有基于该构造函数的实例添加新的方法或属性。这种机制是js实现集成的主要方法之一。

__proto__

  • __proto__是对象的内置属性,它指向该对象的原型对象。这个属性在ES标准定义中的名字应该是[[Prototype]],但是由于历史原因和浏览器兼容性考虑,js为对象添加了__proto__属性以方便访问和修改原型链。
  • proto__并不是js语言本身的特性,而是各大厂商约定的私有属性。不建议在项目中直接使用__proto,推荐使用Object.getPrototypeOf()方法获取实例对象的原型。
  • 当访问一个对象的属性时,如果内部没有该属性,就会在它的__proto__属性所指的那个父对象去找,父对象没有,再去父对象的父对象里找,知道null,即原型链的末端。

prototype__proto__的联系和区别

  • prototype与__proto__都指向原型对象,任意一个函数(包括构造函数)都有一个prototype属性,指向该函数的原型对象。任意一个构造函数的实例化对象,都有一个__proto__属性,它指向构造函数(new)的原型对象(prototype).
  • prototype属性是函数独有的,而__proto__是每个对象都有的(包括实例对象、函数)。
  • prototype的作用是保存所有实例公共的属性和方法;__proto__的作用是当访问一个对象的属性时,如果内部没有该属性,就回去它的__proto__属性所指的那个父对象去找。

总结: 通过理解这两个概念,可以帮助我们更好的掌握js的继承和原型链机制,原型是js面向对象编程的核心之一。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值