vue中关于_ob_:observer的处理方式

Vue 中,ob 是一个内部属性,用于标记一个对象是否已被 Vue 的观察者系统观察。当把一个对象传递给 Vue 实例后,Vue 会通过响应式的方式将这个对象转化成 getter/setter 对象,并在 ob 属性中添加一个标记,以便后续的处理。

如果一个数据对象被多个 Vue 实例中的 JSON.stringify 或 $watch 观察,那么就会引入多个 ob 属性,这可能会导致一些内存泄漏问题。因此,Vue 中对于 ob 属性的处理方式包括以下两种:

  1. 在开发环境中,Vue 会对所观察的对象进行一个副本,以避免多个 ob 属性的问题。这种方式对性能有一定的损失,但可以避免潜在的内存泄漏问题。

  2. 在生产环境中,Vue 会直接使用 ob 属性,在对对象进行处理时,会先检查该对象是否已经存在 ob 属性,如果已经存在,则直接使用该属性,否则会通过 Vue.Observable 重新创建一个观察者对象。

以下是两个关于 ob 属性的示例:

示例一:对象被 Vue 观察后,会在 ob 属性中添加一个标记

import Vue from 'vue'

const data = {
  name: '张三',
  age: 20
}

new Vue({
  el: '#app',
  data
})

console.log(data._ob_)
// 输出结果如下:
// {
//   dep: Dep {...},
//   value: {name: "张三", age: 20},
//   vmCount: 0
// }

示例二:使用 ob 属性可以获取到对象的观察者实例

import Vue from 'vue'

const data = {
  name: '张三',
  age: 20
}

const vm = new Vue({
  data
})

console.log(data._ob_.vmCount) // 输出结果:1
console.log(vm._data._ob_.vmCount) // 输出结果:1
console.log(data._ob_.dep.subs.length) // 输出结果:1
console.log(vm._data._ob_.dep.subs.length) // 输出结果:1

上述示例中,使用 ob 属性可以访问到观察者对象的信息,包括 dep、value 和 vmCount。其中,dep 表示该对象的依赖管理器;value 表示该对象的原始值;vmCount 表示该对象目前被多少个 Vue 实例观察。同时,通过访问 dep.subs 也可以获取到该对象所有的观察者列表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue中关于_ob_:observer的处理方式 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue动态组件与内置组件浅析讲解

    Vue动态组件与内置组件浅析讲解 什么是Vue动态组件 Vue动态组件是一种结合动态组件和组件的功能,允许我们在运行时通过提供一个名称来动态切换组件。 我们可以使用Vue的内置动态组件标签\<component>,该标签可以通过一个特殊的is属性动态绑定组件。 例如: <component :is="currentComponen…

    Vue 2023年5月28日
    00
  • Vue实现让页面加载时请求后台接口数据

    当Vue应用渲染完毕后,我们可以在mounted钩子函数中去请求后台接口数据。 以下是步骤: 1. 安装axios 首先,我们需要安装axios来进行请求后台接口数据。可以通过npm或yarn来进行安装。 npm install axios // 或 yarn add axios 2. 导入axios 在Vue组件文件中导入axios库。 import ax…

    Vue 2023年5月28日
    00
  • 基于node+vue实现简单的WebSocket聊天功能

    下面我来详细讲解“基于node+vue实现简单的WebSocket聊天功能”的完整攻略。 前置知识 在开始之前,需要了解一些基础知识: WebSocket:是一种基于 TCP 协议的新型网络协议,可以实现双向通信。 Node.js:一个基于Chrome V8引擎的JavaScript运行环境。 Vue.js:一个构建用户界面的渐进式框架。 npm:Node.…

    Vue 2023年5月28日
    00
  • vue使用axios上传文件(FormData)的方法

    下面是详细的Vue使用axios上传文件(FormData)的方法攻略: 1. 安装axios库 首先需要在Vue项目中安装axios库,可以通过npm命令进行安装: npm install axios –save 2. 引入axios库 在Vue的组件中引入axios库的方法如下: import axios from ‘axios’ 3. 创建FormD…

    Vue 2023年5月28日
    00
  • 解决ie11 SCRIPT5011:不能执行已释放Script的代码问题

    当使用IE11访问某些页面时,可能会出现SCRIPT5011:不能执行已释放Script的代码问题,这是由于IE11中的脚本引擎与之前版本的IE存在不同的行为所导致的。如果您遇到了这个问题,那么请按照以下攻略进行解决: 步骤1:确保它是由IE11引起的问题 首先,需要确认这个问题是由IE11引起的。可以在其他现代浏览器(如Chrome、Firefox等)中访…

    Vue 2023年5月28日
    00
  • Vue.delete()删除对象的属性说明

    下面就来详细讲解一下Vue.delete()删除对象的属性说明。 Vue.delete() 概述 Vue框架中可以通过Vue.delete()方法来删除一个已有的对象属性。因为Vue.js做了很多数据方面的封装,如果我们直接改变对象属性值可能会导致一些问题,所以我们需要使用特定的方法来删除对象属性。 具体来说,Vue.delete()是Vue提供的全局方法,…

    Vue 2023年5月28日
    00
  • 快速了解vue-cli 3.0 新特性

    快速了解vue-cli 3.0 新特性 简介 vue-cli是一个脚手架工具,用于在Vue.js项目中快速生成模板和配置文件。在Vue.js一系列项目中,vue-cli是一个非常重要的工具,对于Vue.js的开发和部署有着重要的作用。 vue-cli 3.0 新特性 vue-cli 3.0是一个全新的版本,这个版本有着重要的改进和新特性,使得用户可以更轻松的…

    Vue 2023年5月28日
    00
  • 手写vite插件教程示例

    首先,我们需要明确几个概念: Vite:一款轻量、快速的 Web 开发构建工具。 插件(Plugin):能够扩展 Vite 的功能,增强开发体验。 下面是手写 Vite 插件的完整攻略: 1. 确定插件需求 在开始编写插件之前,我们要先明确需要实现的功能。可以查看 Vite 的官方插件文档,进行参考和借鉴。例如,我们想要编写一个 Vite 插件来自动添加时间…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部