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

yizhihongxing

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利用v-for嵌套输出多层对象,分别输出到个表的方法

    使用Vue利用v-for嵌套输出多层对象并将其分别输出到不同表的方法主要有以下两个步骤: 在Vue组件中用v-for进行循环嵌套 首先,在Vue组件中定义需要显示的多层对象,并使用v-for指令进行循环嵌套。当要循环遍历的对象为多维数组时,我们需要进行多层循环嵌套,如下例子所示: <template> <div> <table&…

    Vue 2023年5月28日
    00
  • vue-cli3.0之配置productionGzip方式

    下面是“vue-cli3.0之配置productionGzip方式”的完整攻略: 安装相关依赖 npm install compression-webpack-plugin@^2.0.0 –save-dev 配置vue.config.js文件 在项目根目录下找到vue.config.js文件,若没有则新建一个,将以下代码复制进去: const Compre…

    Vue 2023年5月28日
    00
  • 浅谈vue+webpack项目调试方法步骤

    下面我会详细讲解“浅谈vue+webpack项目调试方法步骤”的完整攻略,包含两个示例说明: 1. 前言 在开发 Vue.js 项目的过程中,使用 webpack 打包工具的情况非常普遍。然而,当我们要进行项目调试时,可能会遇到很多问题,例如如何设置断点,如何在浏览器中查看 console 输出等。本文旨在分享一些使用 Vue.js 与 webpack 进行…

    Vue 2023年5月27日
    00
  • 如何配置vue.config.js 处理static文件夹下的静态文件

    下面是如何配置vue.config.js处理static文件夹下静态文件的完整攻略。 首先,需要明确一下vue-cli会默认将static文件夹里的文件拷贝到打包后的根目录中,并不会对其进行任何处理,因此我们需要配置vue.config.js来处理这些静态文件。 以下是配置过程: 步骤一:创建vue.config.js文件 在项目根目录下创建vue.conf…

    Vue 2023年5月28日
    00
  • 详解使用vuex进行菜单管理

    对于“详解使用Vuex进行菜单管理”的完整攻略,以下是步骤和示例说明: 1. 确定Vuex的状态管理 在使用Vuex进行菜单管理之前,需要确定有哪些状态需要在Vuex中进行管理。在本教程中,我们需要管理的状态有: 菜单数据:用于渲染整个菜单。 当前菜单项:用于存储当前选择的菜单项,以便在页面中高亮显示。 打开的菜单项:用于存储当前展开的菜单项。 你可以在Vu…

    Vue 2023年5月27日
    00
  • Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )

    Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK) 什么是Vue服务端渲染和Vue浏览器端渲染 Vue服务端渲染(SSR)是指将Vue组件在服务器端先渲染成HTML字符串,然后再将该HTML字符串发送给浏览器进行解析和渲染的过程。Vue服务端渲染可以极大地提高首屏渲染速度,同时对于SEO也有一定的优化作用。 Vue浏览器端渲染(CSR)是指使用浏览器…

    Vue 2023年5月27日
    00
  • vue中jsonp的使用方法

    当前主流的前端框架之一就是Vue.js。在使用Vue.js时,有时我们需要使用JSONP(JSON with Padding)来解决跨域请求的问题。以下是关于Vue中JSONP的使用方法的完整攻略。 什么是JSONP? JSONP是一种跨域的请求方式。它通过动态添加<script>标签来实现跨域请求数据的方法。JSONP的实现过程如下: 在客户端…

    Vue 2023年5月28日
    00
  • vue+canvas绘制时间轴的方法

    下面是关于”vue+canvas绘制时间轴的方法”的详细攻略: 前置技能 在学习”vue+canvas绘制时间轴的方法”之前,需要了解以下前置技能: Vue.js框架的基本使用 HTML5中canvas标签的基本使用 JavaScript中处理时间的基本方法 实现步骤 1. 准备工作 首先我们需要打开一个vue项目,并引入canvas标签,在我们的vue组件…

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