news 2026/8/13 16:35:37

Vue 中理解__proto__和prototype

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue 中理解__proto__和prototype

Vue 中__proto__prototype的关联与应用全解析

Vue 实例(vm/根实例、vc/组件实例)的能力继承体系完全基于 JavaScript 原型链机制,而__proto__prototype是原型链的核心载体。本文先夯实原生 JS 中二者的本质区别,再分 Vue 2/Vue 3 拆解其在 Vue 中的关联逻辑、底层实现,最后结合实际开发场景讲解应用与避坑要点。

一、基础铺垫:JS 原生中__proto__prototype的核心区别

要理解 Vue 中的关联逻辑,需先掌握原生 JavaScript 中二者的本质——prototype是构造函数的“能力仓库”,__proto__是实例的“原型导航指针”。

1. 核心定义与归属

概念归属对象本质/类型核心作用核心特点
prototype仅函数(构造函数)普通对象(原型对象)存放“供所有实例继承的公共属性/方法”,是构造函数的“原型仓库”仅函数拥有;默认包含constructor(指向构造函数本身)
__proto__所有对象(含函数/实例)原型指针(内置属性)连接实例与构造函数的prototype,实现原型链查找(实例自身无属性时向上查找)所有对象拥有;ES6 标准化,不建议手动修改

2. 原生 JS 基础示例(理解核心关联)

// 1. 构造函数(拥有 prototype 仓库)functionPerson(name){this.name=name;// 实例私有属性}// 往 prototype 仓库添加公共方法(所有实例共享)Person.prototype.sayHi=function(){console.log(`Hi,${this.name}`);};// 2. 创建实例(只有 __proto__,无 prototype)constp1=newPerson('张三');constp2=newPerson('李四');// 3. 核心关联:实例.__proto__ === 构造函数.prototypeconsole.log(p1.__proto__===Person.prototype);// trueconsole.log(p2.sayHi===p1.sayHi);// true(共享仓库方法)// 4. 原型链查找:实例 → __proto__ → prototype → 上层 prototype// p1 自身无 toString → 找 p1.__proto__(Person.prototype)→ 无 → 找 p1.__proto__.__proto__(Object.prototype)→ 找到console.log(p1.toString()===Object.prototype.toString.call(p1));// true// 5. 原型链终点:Object.prototype.__proto__ = nullconsole.log(Object.prototype.__proto__);// null

3. 核心结论(原生 JS)

  • 实例通过__proto__指向构造函数的prototype,从而继承公共属性/方法;
  • prototype是“仓库”,__proto__是“导航”,二者共同构成原型链;
  • 所有原型链最终指向Object.prototype.__proto__(值为null)。

二、Vue 中的核心构造函数(关联的前提)

Vue 内部通过两个核心构造函数支撑实例体系(Vue 2 清晰区分,Vue 3 微调),其prototype是 Vue 实例能力的核心载体:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/13 0:58:52

diffuser中的注意力处理器(attention_processor)

在 Diffusers 库中,attention_processor(注意力处理器)是用于实现不同类型注意力机制计算的核心组件,它封装了注意力操作的具体逻辑,使得不同模型或任务可以灵活替换或定制注意力计算方式。 核心作用 注意力处理器负…

作者头像 李华
网站建设 2026/8/12 23:09:40

Flutter Engine长文本渲染优化:从卡顿到流畅的实战指南

你是否曾遇到过Flutter应用在渲染长篇对话记录或电子书时出现明显卡顿?当文本内容超过10万字,应用首屏加载缓慢,滑动体验更是令人沮丧。Flutter Engine通过其先进的渲染架构,为长文本场景提供了完整的性能优化方案,让海…

作者头像 李华
网站建设 2026/8/12 15:04:55

2025终极JUCE音频开发实战:从新手到专家的完整成长路径

2025终极JUCE音频开发实战:从新手到专家的完整成长路径 【免费下载链接】JUCE 项目地址: https://gitcode.com/gh_mirrors/juc/JUCE JUCE(Jules Utility Class Extensions)作为业界领先的跨平台C音频应用框架,为开发者提供…

作者头像 李华
网站建设 2026/8/10 10:01:53

实战精通CPUID指令:5个场景掌握处理器信息获取核心技术

实战精通CPUID指令:5个场景掌握处理器信息获取核心技术 【免费下载链接】linux-insides-zh Linux 内核揭秘 项目地址: https://gitcode.com/gh_mirrors/lin/linux-insides-zh 在Linux系统开发中,你是否曾困惑如何准确识别处理器特性、优化代码性能…

作者头像 李华
网站建设 2026/8/10 16:45:28

革命性Rust跨平台性能测试方案:企业级多架构性能基准实践

革命性Rust跨平台性能测试方案:企业级多架构性能基准实践 【免费下载链接】cross “Zero setup” cross compilation and “cross testing” of Rust crates 项目地址: https://gitcode.com/gh_mirrors/cro/cross 在当今多架构并行的技术环境中,R…

作者头像 李华
网站建设 2026/8/12 9:51:32

洛谷 P10468 兔子与兔子

题目描述很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。然后我们每次选择两个区间&#xf…

作者头像 李华