原型链中的prototype和__proto__

37 阅读1分钟

总是弄混prototype__proto__(两侧两个下划线_),在这里梳理一下

prototype

函数才有的属性
打印prototype得到{constructor,[[Prototype]]}, 所以他是一个对象(原型对象)
实例共享的原型对象
提到对象原型就是指prototype
作用: 为实例提供一个共享的属性和方法

function person() {}
person.prototype.constructor.name //person
person.prototype.constructor == person //true

prototype重新赋值会丢失constructor

  • 直接赋值给原型
  • 使用Object.create()
    • 寄生式组合继承中用到
  • 原型链继承

__proto__

对象所有的属性, 函数也是对象类型所以也有__proto__
__proto__ (ES标准定义[[Prototype]]的具体实现)是一个引用,指向实例的原型对象,形成原型链 Object.getPrototypeOf 等同于 __proto__
作用: 原型链上的查找和方法继承

function person() {}
const p = new person()
p.__proto__===person.prototype //true
Object.getPrototypeOf(p)===person.prototype //true

一张关系图 参考:blog.csdn.net/cc188688768…

image.png