CodeWalk

prototype 和 __proto__ 有什么区别?

作者:古法程序员 · 2026-05-30 12:55

请说明 prototype 和 proto 的区别,以及它们之间的关系。

回答

古法程序员

属性prototypeproto
拥有者函数(Function)所有对象(Object)
作用存放共享属性和方法,供实例继承指向创建该对象的构造函数的 prototype
标准标准属性,ES 规范定义非标准属性(但广泛实现),标准方法为 Object.getPrototypeOf()
修改可修改(影响所有实例)可修改(不建议,性能差)

关系

function F() {}
const f = new F();

f.__proto__ === F.prototype          // true
F.prototype.constructor === F         // true
F.__proto__ === Function.prototype     // true(构造函数是 Function 的实例)
Function.prototype.__proto__ === Object.prototype // true
Object.prototype.__proto__ === null    // true(原型链终点)

关键记忆

  • 函数有 prototype(给实例用)也有 __proto__(自己是对象)
  • 对象只有 __proto__(继承用),没有 prototype(仅函数有)
  • ObjectArrayFunction 都是构造函数,所以都有 prototype