美文网首页前端Vue.js的学习过程与心得码农的世界
Object.freeze( ) 阻止Vue无法实现 响应式系统

Object.freeze( ) 阻止Vue无法实现 响应式系统

作者: honey缘木鱼 | 来源:发表于2018-12-25 15:12 被阅读3次

做了一个vue项目,总是边百度边写,知识体系不能系统起来,准备在浏览下vue.js官网基础知识。

当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。但是如果使用 Object.freeze(),这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。

具体使用办法举例:

<template>
  <div>
     <p>freeze后会改变吗
        {{obj.foo}}
     </p>
      <!-- 两个都不能修改??为什么?第二个理论上应该是可以修改的-->
      <button @click="change">点我确认</button>
  </div>
</template>

<script>
var obj = {
  foo: '不会变'
}
Object.freeze(obj)
export default {
  name: 'index',
  data () {
    return {
      obj: obj
    }
  },
  methods: {
    change () {
      this.obj.foo = '改变'
    }
  }
}
</script>

运行后:

image

从报错可以看出只读属性foo不能进行修改,Object.freeze()冻结的是值,你仍然可以将变量的引用替换掉,将上述代码更改为:

<button @click="change">点我确认</button>

change () {
      this.obj = {
        foo: '会改变'
      }
    }

Object.freeze()是ES5新增的特性,可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。防止对象被修改。

如果你有一个巨大的数组或Object,并且确信数据不会修改,使用Object.freeze()可以让性能大幅提升。

相关文章

  • Vue笔记

    阻止同步 使用 Object.freeze(),这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。 Vue实...

  • Object.freeze( ) 阻止Vue无法实现 响应式系统

    做了一个vue项目,总是边百度边写,知识体系不能系统起来,准备在浏览下vue.js官网基础知识。 当一个 Vue ...

  • 关闭响应

    Object.freeze(obj)阻止修改现有的属性,也意味着响应系统无法再追踪变化。关闭对象的响应。 ,与用户...

  • Vue.js教程_2

    Object.freeze()可以阻止修改现有的属性,也意味着响应系统无法再追踪变化。参数为json对象。例如va...

  • vue简单笔记

    一、小细节 Object.freeze()会阻止修改现有的属性,也意味着响应系统无法再追踪变化。 例子: 这里的f...

  • Vue原理学习(二)

    响应式系统的基本原理 Vue基于Object.defineProperty来实现响应式,对于Object.defi...

  • Vue的响应式浅析

    1 Vue如何实现响应式? Vue的响应式是建立在监听data中的数据. 2 在Vue2中响应式的实现 Vue通过...

  • 2021-07-23 vue2与vue3的响应式原理

    vue2的响应式原理 无法响应对象的新增与删除 vue3的响应式原理

  • 探究vue3中响应式系统proxy的应用

    在上一篇文章中,我们了解了vue2.x的响应式系统原理,现在这篇文章了解关于vue3的响应式系统实现。 在ES6里...

  • vue 3.0 笔记

    vue 3.0 笔记 1、Vue 3.0 如何做到性能提升 响应式系统升级使用 Proxy 对象重写响应式系统:v...

网友评论

    本文标题:Object.freeze( ) 阻止Vue无法实现 响应式系统

    本文链接:https://www.haomeiwen.com/subject/ztyflqtx.html