p.proto
p.constructor.prototype
Object.getPrototypeOf(p)
补充
补充:三种获取对象原型的方式及差异:
p.__proto__:历史上 ES6 之前是各浏览器私有的隐藏属性,ES6 规范化为访问器([[Prototype]]的暴露),允许读写,但官方不推荐直接使用,性能差且语义模糊。p.constructor.prototype:通过构造函数反查原型,要求constructor未被改写;某些场景下原型对象可能没有constructor字段,不可靠。Object.getPrototypeOf(p):官方推荐的读取方式 (ES5+),返回p的原型;对应的写入 API 是Object.setPrototypeOf(p, proto)。获取原型上的属性用
Object.getOwnPropertyNames(Proto)或Reflect.ownKeys(Proto)。
function Foo() {}
const f = new Foo()
Object.getPrototypeOf(f) === Foo.prototype // true(推荐)
f.__proto__ === Foo.prototype // true(不推荐)
f.constructor.prototype === Foo.prototype // true(脆弱,依赖 constructor)
来源整理自:vue3js.cn 面试官系列



