电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解如何在Javascript中使用Object.freeze()

瀏覽:115日期:2023-10-10 18:46:38

Object.freeze()

Object.freeze() 方法可以凍結一個對象。一個被凍結的對象再也不能被修改;凍結了一個對象則不能向這個對象添加新的屬性,不能刪除已有屬性,不能修改該對象已有屬性的可枚舉性、可配置性、可寫性,以及不能修改已有屬性的值。此外,凍結一個對象后該對象的原型也不能被修改。freeze() 返回和傳入的參數相同的對象

用法

const objectExample = { prop1: 20, prop2: '羊先生'};// 默認情況下,我們可以根據需要修改對象的屬性objectExample.prop1 = 100;console.log(objectExample.prop1)// 凍結對象Object.freeze(objectExample);objectExample.prop2 = 'Alice' // 如果在嚴格模式會拋出失敗,在非嚴格模式下只會拋出異常console.log(objectExample.prop2);

結果

非嚴格模式

詳解如何在Javascript中使用Object.freeze()

添加嚴格模式

'use strict';

詳解如何在Javascript中使用Object.freeze()

拋出異常提示該屬性是只讀的

深度凍結

需要注意的是,如果被凍結的對象具有以對象作為值的屬性,這些對象可以被更改

const theObject = { x: 1, z: 2, y: { a: 'Hello', b: '羊先生' }}Object.freeze(theObject);theObject.x = 100console.log(theObject.x);theObject.y.a = ’vipbic’;console.log(theObject.y.a);

結果

詳解如何在Javascript中使用Object.freeze()

發現對象第一層是被凍結了,但是第二層并沒有被凍結,這意味著我們只實現了「淺凍結」要通過凍結對象的所有屬性(包括那些將其他對象存儲為值的屬性)來使對象不可變,我們必須執行「深度凍結」—即使用遞歸在凍結父對象之前凍結子對象。

遞歸凍結

const theObject = { x: 1, z: 2, y: { a: 'Hello', b: '羊先生' }}const deepFreeze = (obj) => { const propNames = Object.getOwnPropertyNames(obj) for (const name of propNames) { const value = obj[name]; if (value && typeof value === 'object') { deepFreeze(value); } } return Object.freeze(obj);}deepFreeze(theObject);theObject.y.a = 100;console.log(theObject.y.a );

結果

詳解如何在Javascript中使用Object.freeze()

在Vue中使用Object.freeze

在vue2.0中,當你把一個普通的 JavaScript 對象傳給 Vue 實例的 data 選項,Vue 將遍歷此對象所有的屬性,并使用 Object.defineProperty 把這些屬性全部轉為 getter/setter,這些 getter/setter 對用戶來說是不可見的,但是在內部它們讓 Vue 追蹤依賴,在屬性被訪問和修改時通知變化

有時在實際應用中,我們只是用來存儲某個對象或者數組,并不要求它響應對應的視圖,但在這個過程中vue還是會用object.defineProperty來監聽這個數組,這樣就是一種性能浪費,所以我們闊以使用Object.freeze來凍結數據

<h4 v-for='(item,idx) in items' :key='idx'>{{ item.text }}</h4>

data() { let data = Object.freeze([{text:’羊先生’},{text:’ipbic’}]) return { msg: ’’, items:data }},mounted() { this.items[0].text = ’分享快樂’; // 界面不會更新 this.items = [{ text: ’itnavs’ },{ text: ’分享快樂’ }]; // 界面會更新 this.items = Object.freeze([{ text: ’itnavs’ },{ text: ’分享快樂’ }]); // 界面會更新},

如果你有一個巨大的數組或Object,并且確信數據不會修改,使用Object.freeze()可以讓性能大幅提升。在我的實際開發中,這種提升大約有5~10倍,倍數隨著數據量遞增

使用Object.freeze從而避免這種資源的浪費,不要看它小,而忽略,不積跬步無以至千里

到此這篇關于詳解如何在Javascript中使用Object.freeze()的文章就介紹到這了,更多相關Javascript Object.freeze()內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 天津电机维修|水泵维修-天津晟佳机电设备有限公司 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 不锈钢酒柜|恒温酒柜|酒柜定制|酒窖定制-上海啸瑞实业有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 槽钢冲孔机,槽钢三面冲,带钢冲孔机-山东兴田阳光智能装备股份有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 盘装氧量分析仪-防爆壁挂氧化锆分析仪-安徽吉帆仪表有限公司 | R507制冷剂,R22/R152a制冷剂厂家-浙江瀚凯制冷科技有限公司 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 365文案网_全网创意文案句子素材站 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 东风体检车厂家_公共卫生体检车_医院体检车_移动体检车-锦沅科贸 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 小型单室真空包装机,食品单室真空包装机-百科 | 石膏基自流平砂浆厂家-高强石膏基保温隔声自流平-轻质抹灰石膏粉砂浆批发-永康市汇利建设有限公司 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 广州展览制作|展台制作工厂|展览设计制作|展览展示制作|搭建制作公司 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 |