最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS Object構(gòu)造函數(shù)之Object.freeze

 更新時(shí)間:2021年04月28日 14:48:34   作者:淺笑·  
這篇文章主要介紹了JS Object構(gòu)造函數(shù)之Object.freeze,對(duì)JS感興趣的同學(xué),可以深入了解下

概述

Object.freeze(obj)可以凍結(jié)一個(gè)對(duì)象。一個(gè)被凍結(jié)的對(duì)象再也不能被修改;

凍結(jié)了一個(gè)對(duì)象則不能向這個(gè)對(duì)象添加新的屬性,不能刪除已經(jīng)屬性,不能修改該對(duì)象已有屬性的可枚舉性、可配置性、可寫(xiě)性、以及不能修改已有屬性的值。

此外,凍結(jié)一個(gè)對(duì)象后該對(duì)象的原型也不能被修改。freeze()返回和傳入的參數(shù)是相同的對(duì)象。

JavaScriptDemo: Object.freeze()

const obj = {
  prop:42
}
Object.freeze(obj)

obj.prop = 33 // 嚴(yán)格模式下會(huì)拋出錯(cuò)誤。

console.log(obj.prop) // 42

示例

1) 凍結(jié)對(duì)象

var obj = {
  prop: function() {},
  foo:'bar'
}

// 作為參數(shù)傳遞的對(duì)象與返回的對(duì)象都被凍結(jié)
// 所以不必保存返回的對(duì)象 (因?yàn)閮蓚€(gè)對(duì)象全等)
var o = Object.freeze(obj)
o === obj // true

// 現(xiàn)在開(kāi)始任何改變都將失效

obj.foo = ‘he' //不做任何事
Obj.hxx = 'he' // 不添加此屬性

// 試圖通過(guò)Object.defineProperty 更改屬性
// 下面兩個(gè)語(yǔ)句都會(huì)拋出異常
Object.defineProperty(obj,'foo',{value:'yy'})
Object.defineProperty(obj,'sex',{value:'女'})

// 也不能更改原型
// 下面兩個(gè)語(yǔ)句都會(huì)拋出異常
Object.setPrototypeOf(obj,{x:20})
Obj.__prorp__ = {x:20}

2) 凍結(jié)數(shù)組

let a = [0]
Object.freeze(a) // 現(xiàn)在數(shù)組不能被更改了

a[0] = 1 // 失敗
a.push(2) // 失敗

被凍結(jié)的對(duì)象是不可改變的。但也不總是這樣。下面展示了凍結(jié)對(duì)象不是常量對(duì)象(淺凍結(jié))

3) 淺凍結(jié)

let obj = {
  internal: {}
}

Object.freeze(obj)
obj.internal.a = ‘he'
console.log(obj.internal.a) // he

要使對(duì)象不可變,需要遞歸凍結(jié)每個(gè)類型為對(duì)象的屬性(深凍結(jié))

4) 深凍結(jié)

deepFreeze = (obj) => {
  var propNames = Object.getOwnPropertyNames(obj);
  propNames.forEach(function (name) {
    var prop = obj[name];
    if (typeof prop == 'object' && prop !== null) {
      deepFreeze(prop);
    }
  });
  Object.freeze(obj);
}


deepFreeze1 = (obj) => {
  var prop, propName
  Object.freeze(obj)
  for (propName in obj) {
    prop = obj[propName]
    if (!obj.hasOwnProperty(propName) || !(typeof prop === "object") || Object.isFrozen(prop)) {
      // 跳過(guò)原型鏈上的屬性和已凍結(jié)的對(duì)象.
      continue
    }
    deepFreeze1(prop)
  }
}

深凍結(jié)的用處一般我們?cè)谛枰粋€(gè)屬性,但是一開(kāi)始它為空或者不存在,那么你僅需要設(shè)置一些初始值

title: "樓層銷售",
value: "",
options: [],

存在的意義

如果你有一個(gè)巨大的數(shù)組或者Object,并且確定數(shù)據(jù)不會(huì)改變,使用Object.freeze()可以讓性能大幅度提升。Object.freeze()凍結(jié)的是值,你仍然可以將變量的引用替換掉。

new vue({
  data: {
    // vue不會(huì)對(duì)list里的object做getter、setter綁定
    list: Object.freeze([
      { value: 1 },
      { value: 2 }
    ])
  },
  mounted () {
     // 界面不會(huì)有響應(yīng)
     this.list[0].value = 100;


     // 下面兩種做法,界面都會(huì)響應(yīng)
     this.list = [
       { value: 100 },
       { value: 200 }
     ];
     this.list = Object.freeze([
       { value: 100 },
       { value: 200 }
     ]);
  }
})

以上就是JS Object構(gòu)造函數(shù)之Object.freeze的詳細(xì)內(nèi)容,更多關(guān)于JS Object.freeze的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信公眾號(hào)生成新浪短網(wǎng)址的實(shí)現(xiàn)(快速生成)

    微信公眾號(hào)生成新浪短網(wǎng)址的實(shí)現(xiàn)(快速生成)

    這篇文章主要介紹了微信公眾號(hào)生成新浪短網(wǎng)址的實(shí)現(xiàn)(快速生成),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JavaScript生成隨機(jī)數(shù)的各種方法大全

    JavaScript生成隨機(jī)數(shù)的各種方法大全

    JavaScript 是一門(mén)強(qiáng)大的編程語(yǔ)言,在前端和后端開(kāi)發(fā)中廣泛使用,生成隨機(jī)數(shù)是 JavaScript 開(kāi)發(fā)中的常見(jiàn)需求,應(yīng)用場(chǎng)景包括游戲開(kāi)發(fā)、驗(yàn)證碼生成、數(shù)據(jù)模擬等,本文將詳細(xì)介紹 JavaScript 中生成隨機(jī)數(shù)的各種方法,并分析其適用場(chǎng)景和優(yōu)缺點(diǎn),需要的朋友可以參考下
    2025-03-03
  • Function.prototype.bind用法示例

    Function.prototype.bind用法示例

    想必大家對(duì)Function.prototype.bind并不陌生吧,下面為大家介紹下它的簡(jiǎn)單調(diào)用及DOM調(diào)用,感興趣的朋友可以參考下
    2013-09-09
  • ionic+html5+API實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用

    ionic+html5+API實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用

    這篇文章主要為大家詳細(xì)介紹了ionic+html5+API實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • js 數(shù)值項(xiàng)目的格式化函數(shù)代碼

    js 數(shù)值項(xiàng)目的格式化函數(shù)代碼

    數(shù)值項(xiàng)目的格式化函數(shù)代碼,需要的朋友可以參考下。
    2010-05-05
  • js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法

    js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法

    這篇文章主要介紹了js+html5實(shí)現(xiàn)canvas繪制鏤空字體文本的方法,涉及html5文字效果的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • js模擬點(diǎn)擊以提交表單為例兼容主流瀏覽器

    js模擬點(diǎn)擊以提交表單為例兼容主流瀏覽器

    我們會(huì)常常用到JS的模事件,比如說(shuō)點(diǎn)擊事件,舉個(gè)簡(jiǎn)單的例子,點(diǎn)擊表單外的“提交”按鈕來(lái)提交表單,下面為大家介紹下具體的實(shí)現(xiàn)
    2013-11-11
  • Firefox下設(shè)為主頁(yè)的JavaScript代碼

    Firefox下設(shè)為主頁(yè)的JavaScript代碼

    在IE下,我們可以輕松使用以下代碼來(lái)實(shí)現(xiàn)設(shè)置主頁(yè) 但在firefox我們需要做的更多
    2008-09-09
  • 理解JavaScript中的對(duì)象

    理解JavaScript中的對(duì)象

    這篇文章主要介紹了如何理解JavaScript中的對(duì)象,幫助大家更好的學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-08-08
  • javascript實(shí)現(xiàn)checkBox的全選,反選與賦值

    javascript實(shí)現(xiàn)checkBox的全選,反選與賦值

    這篇文章主要介紹了javascript實(shí)現(xiàn)checkBox的全選,反選與賦值的方法,以實(shí)例形式詳細(xì)分析了實(shí)現(xiàn)的思路及對(duì)應(yīng)的html與js代碼的實(shí)現(xiàn)過(guò)程
    2015-03-03

最新評(píng)論

新乡市| 曲周县| 泰顺县| 四川省| 静宁县| 宣恩县| 上栗县| 山西省| 合肥市| 嘉义县| 津市市| 北辰区| 扶绥县| 新乐市| 青龙| 崇礼县| 阜城县| 阳曲县| 正镶白旗| 商洛市| 海兴县| 军事| 阿拉善右旗| 湄潭县| 台山市| 蓝田县| 锡林浩特市| 凤翔县| 祁门县| 依兰县| 穆棱市| 海门市| 台州市| 昌平区| 文水县| 通化市| 吉木萨尔县| 泾源县| 贵州省| 兰溪市| 甘谷县|