__proto__对比prototype

实例对象没有 prototype 属性 ,只有函数才有 prototype 属性。

实例对象上有的是 __proto__ ,指向其构造函数的 prototype。

详细解释

1. 函数对象

函数在 JavaScript 中是一等对象,但它们有一个特别的属性:

javascript 复制代码
function Foo() {}
console.log(Foo.prototype); 
// { constructor: Foo, __proto__: Object.prototype }
  • Foo.prototype 是一个对象,会成为由 new Foo() 创建的实例的原型。
  • 所以 prototype 是 函数特有的属性。

2. 实例对象

实例通过 new 创建时,会把自己的 __proto__ 指向构造函数的 prototype:

javascript 复制代码
function Foo() {}
const f = new Foo();

console.log(f.__proto__ === Foo.prototype); // true
console.log(f.prototype); // undefined ❌
  • f(实例)没有 prototype 属性。
  • f.__proto__ 指向 Foo.prototype。

3. 一张关系图

scss 复制代码
 Foo (函数)
   │
   ├── prototype  ----> { constructor: Foo, ... }
   │                        ▲
   │                        │
   └─── new Foo() ---> f.__proto__
相关推荐
卸任11 小时前
Vibe coding工具使用心得
前端·ai编程
brien911 小时前
为什么模型标称 1M,Google Antigravity 聊到 256K 却突然失忆?我们给它做了个原生行内监控圆环
前端
修炼的dance12 小时前
录屏关键帧间隔多少合适?六档实测,2秒到10秒小了75.6%
前端
Lank_M12 小时前
关键帧从1秒拉到10秒,录屏小87.3%,摄像头小10.8%
前端
补码缩写12 小时前
用 ffprobe 拆录屏,八成字节在 29 个关键帧上
前端
百思不得小李12 小时前
一个复杂的动态表单是如何实现的
前端·设计模式
陈随易12 小时前
Cmder 停更 17 个月,2.0 支持 Windows Terminal
前端·后端·程序员
风骏时光牛马12 小时前
前沿视界
前端
kyriewen12 小时前
我扫了 814 个依赖,97 个还敢要 Node 10
前端·javascript·程序员
陈随易13 小时前
3000 万人在用的翻译插件,重写一遍就是一门生意
前端·后端·程序员