news 2026/5/27 23:40:49

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/5/26 14:14:50

词库转换终极指南:轻松实现20+输入法无缝迁移

词库转换终极指南:轻松实现20输入法无缝迁移 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代,输入法已经成为我们日常生活和工作…

作者头像 李华
网站建设 2026/5/25 10:14:40

Linux 终端下的 My Sql 常用操作指南(替代 Navicat)

本文演示在 Linux 服务器 上,通过 MySQL 命令行 完成日常在 Navicat 中最常用的数据库操作。适合新手,命令简洁,并附带中文注释。一、登录 MySQLmysql -u root -p-u root:指定登录用户-p:提示输入密码(更安…

作者头像 李华
网站建设 2026/5/25 0:04:12

GLM-4.5-FP8终极指南:3550亿参数MoE大模型快速部署与实战应用

GLM-4.5-FP8终极指南:3550亿参数MoE大模型快速部署与实战应用 【免费下载链接】GLM-4.5-FP8 项目地址: https://ai.gitcode.com/zai-org/GLM-4.5-FP8 智谱AI最新开源的GLM-4.5-FP8大语言模型,以3550亿总参数和创新的混合专家(MoE&…

作者头像 李华
网站建设 2026/5/25 10:15:23

JSLint:提升JavaScript代码质量的智能工具

JSLint:提升JavaScript代码质量的智能工具 【免费下载链接】jslint JSLint, The JavaScript Code Quality and Coverage Tool 项目地址: https://gitcode.com/gh_mirrors/js/jslint 还在为JavaScript代码中的潜在问题而烦恼吗?JSLint正是你需要的…

作者头像 李华
网站建设 2026/5/24 17:28:19

Syncthing Tray:5个让你爱上无服务器文件同步的理由

Syncthing Tray:5个让你爱上无服务器文件同步的理由 【免费下载链接】syncthingtray Tray application and Dolphin/Plasma integration for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/syncthingtray 想要摆脱云存储的束缚,又担心复…

作者头像 李华