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中接收二进制文件流实现pdf预览的方法

    要在Vue中接收二进制文件流实现pdf预览,需要考虑以下几个步骤: 发送请求获取二进制文件流 首先,需要使用Vue的异步请求库,例如axios,发送获取二进制文件流的请求。请求返回的数据类型是一个arraybuffer,需要注意设置responseType为arraybuffer。 示例代码: axios.get(‘http://example.com/fi…

    Vue 2023年5月28日
    00
  • vue中的render函数、h()函数、函数式组件详解

    Vue中的render函数 Vue中的render函数是一个函数式的组件,它可以将一个虚拟的DOM节点渲染成实际的DOM节点。 在Vue2.x版本中,我们可以使用两种方式来创建组件:使用template或者使用render函数。 render函数是一个函数,它接收一个createElement函数作为参数,用来创建虚拟的DOM节点,然后返回这个节点,用来渲染…

    Vue 2023年5月27日
    00
  • vue parseHTML函数源码解析 AST预备知识

    下面我将给出“vue parseHTML函数源码解析 AST预备知识”的完整攻略。 一、概述 在Vue的源码中,parseHTML函数是实现模板编译的关键函数之一。parseHTML函数的作用是将HTML字符串解析为AST(抽象语法树)。 AST是一种抽象的树状表达方式,它将代码的语法结构进行了抽象和归纳,并以树的形式表现出来。在Vue中,AST用于表示模板…

    Vue 2023年5月27日
    00
  • vue props数据传递类型限制方式

    Vue中的props是一种用于父子组件之间传递数据的机制。为了保证数据的正确性和可维护性,我们可以通过对props进行数据传递类型限制方式来限制传递的数据类型,以确保数据能够按照我们的预期运行。 在Vue中,我们可以通过拥有以下数据类型的props: String Number Boolean Array Object Date Function 其中,Ar…

    Vue 2023年5月27日
    00
  • 使用PDF.js渲染canvas实现预览pdf的效果示例

    PDF.js是一个由Mozilla开发的用于在浏览器中呈现PDF文件的JavaScript库。使用PDF.js可以实现在网页上直接预览PDF文件,而不需要使用插件或者其他额外的软件。下面是使用PDF.js渲染canvas实现预览pdf的效果示例的完整攻略: 步骤一:引入PDF.js 首先,在HTML文件中引入PDF.js文件。可以使用CDN来加速文件的加载,…

    Vue 2023年5月28日
    00
  • 微信小程序:报错(in promise) MiniProgramError

    微信小程序是一种轻量级的应用程序,它可以在微信上快速运行,但在开发小程序的过程中会遇到各种问题,其中之一就是“报错(in promise) MiniProgramError”错误。以下是解决此错误的完整攻略: 1. 查看报错信息 当小程序出现“报错(in promise) MiniProgramError”错误时,首先应该查看报错信息,找到代码中的错误。可以…

    Vue 2023年5月28日
    00
  • vue渲染大量数据时卡顿卡死解决方法

    对于Vue渲染大量数据时出现卡顿和卡死的问题,有以下几种解决方法: 1. 利用vue的v-for指令渲染列表时使用分页 对于要渲染大量数据的列表,我们可以通过分页的方式一次渲染一定量的数据,而不是一次性全部渲染,可以有效增强浏览器的性能。这里提供一个简单的分页示例: <template> <div> <ul> <li…

    Vue 2023年5月28日
    00
  • 带你一步步从零搭建一个Vue项目

    让我为您详细讲解“带你一步步从零搭建一个Vue项目”的完整攻略。 前提条件 在开始此过程之前,您需要安装以下工具:- Node.js(建议使用官方稳定版本)- Visual Studio Code 或其他文本编辑器- 命令行工具(例如终端或Git Bash) 第一步:创建项目 使用 Vue CLI 创建一个新的 Vue 项目。在终端中输入以下命令: vue …

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