Object.freeze() 方法小记
在vue中的应用:如果你有一个巨大的数组或Object,并且确信数据不会修改,可以使用
Object.freeze()
方法冻结该数据,这样vue就不会对该对象的getter和setter
做转换,从而让性能得以大幅提升。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <span v-for="item in list">{{item.name}}</span> </div> <script type="text/javascript" src="../../../js/lib/vue-2.5.21.js"></script> <script> 'use strict' new Vue({ el: '#app', data() { return { list: Object.freeze([{ name: '1' }, { name: '2' }]) } }, mounted() { this.list[0].name = '3' // 不会生效 // 如果直接改变this.list 的引用,就会生效 this.list = [{name: 4}] // 或 this.list = Object.freeze([{name: 4}]) } }) </script> </body> </html>
Object.freeze()
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
var obj = { prop: function() {}, foo: 'bar' } // 正常我们可以修改属性值或者删除属性 obj.foo = 'bas' obj.lumpy = 'woof' delete obj.prop 当obj被冻结后 var o = Object.freeze(obj) o === obj // true // 现在任何改变都会失效 obj.foo = '23' // 静默地不会做任何事,在严格模式下会抛出错误 TypeErrors // 试图通过 Object.defineProperty 更改属性 // 下面两个语句都会抛出 TypeError. Object.defineProperty(obj, 'ohai', { value: 17 }); Object.defineProperty(obj, 'foo', { value: 'eit' }); // 也不能更改原型 // 下面两个语句都会抛出 TypeError. Object.setPrototypeOf(obj, { x: 20 }) obj.__proto__ = { x: 20 } 同样数组也会被冻结 let a = [0]; Object.freeze(a); // 现在数组不能被修改了. a[0]=1; // fails silently a.push(2); // fails silently // In strict mode such attempts will throw TypeErrors function fail() { "use strict" a[0] = 1; a.push(2); } fail(); 冻结对象为浅冻结
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
测试一下25道Spring经典面试题你会几道?循环依赖面试详解
前言 先看看什么是循环依赖当一个ClassA依赖于ClassB,然后ClassB又反过来依赖ClassA,这就形成了一个循环依赖:ClassA -> ClassB -> ClassA循环依赖-->2个或以上bean 互相持有对方,最终形成闭环.Spring中循环依赖的场景:1、构造器的循环依赖。(spring也无能为力)2、setter循环依赖:field属性的循环依赖【setter方式 单例,默认方式-->通过递归方法找出当前Bean所依赖的Bean,然后提前缓存【会放入Cach中】起来。通过提前暴露 -->暴露一个exposedObject用于返回提前暴露的Bean。】Spring是先将Bean对象实例化【依赖无参构造函数】--->再设置对象属性的Spring先用构造器实例化Bean对象----->将实例化结束的对象放到一个Map中,并且Spring提供获取这个未设置属性的实例化对象的引用方法。结合我们的实例来看,,当Spring实例化了A、B、C后,紧接着会去设置对象的属性,此时A依赖B,就会去Map中取出存在里面的单例B对象,以此类推,...
- 下一篇
15款Java程序员必备的开发工具
如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它。对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂。下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是——它们都是为了给Java编码和开发提供卓越的支持。 JDK(Java开发工具包)如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具,其中包括必要的Java Complier、Java Runtime Environment(JRE)和Java API。这是开始Java之旅的第一步。 Eclipse IDE如果咨询一些经验丰富的Java开发人员关于他们最喜欢的Java Integrated Development Environment(IDE)是什么,不少人会告诉你是Eclipse IDE。 Eclipse能提供关于代码完成、重构和语法检查这些急需的帮助。它还能提供JDT的一系列工具,包括各种插件工具来帮助开发各种Java应用。 此...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装