总是弄混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…