簡述凍結JS對象方法技術
冰封的美人——凍結JS對象
看到這個標題你可能會很奇怪凍結JS對象,??!又觸碰到我的知識盲區(qū)了,那么首先來了解一下JS對象
JS對象
js對象是普通對象,鍵值對方式,且其屬性不加引號,表示方法如下,對象內有對象屬性,對象方法和普通的對象概念相同
var obj = {
name : "cxy",
age : "18"
}而我們修改對象的屬性,僅僅需要obj.name = "juejin"即可console.log(obj.name)打印出來即可看到修改效果,那么凍結又是什么意思呢?我們來學習一下Object.freeze()
Object.freeze
翻譯下freeze的意思,由此得知freeze()是用來凍結對象的方法,我們只需要將我們要凍結的目標對象作為參數(shù)傳遞給他,那么該對象就會被凍結

const iceObj = Object.freeze(obj)
這樣iceObj就是被凍結的對象,那么凍結又是什么概念呢?我們修改一下對象的age屬性iceObj.age = "19",然后再打印一下console.log(iceObj.age)我們會發(fā)現(xiàn),omygod,依舊是18,不愧是永遠十八歲的冰封美人,除此之外還有一個檢驗對象凍結的方法即Object.isFrozen,返回值為布爾值
不可凍結的對象
又有新的問題了,難不成所有的對象都可以被凍結嗎?nonono,Object.freeze()不可凍結嵌套對象,依舊是那個對象,但是有一個son屬性本身又是一個對象
var obj = {
name : "cxy",
age : "18"
son : {
name : "son",
age : "1"
}
}我們來修改并打印一下son中的name屬性,會發(fā)現(xiàn)其屬性值是修改后的值,所以說Object.freeze()并不是所有對象都能凍住的,當然其object.freeze()還可以凍結數(shù)組,大家可以定義一個數(shù)組,凍結之后,使用下標修改看看效果如何,除此之外還有一共凍結方法即object.seal()它和object.freeze()有差別,我們來看一下
Object.seal
var obj = {
name : "cxy",
age : "18"
}
const iceObj = Object.seal(obj)
iceObj.name = "juejin"
delete iceObj.age
console.log(iceObj)依舊是那個對象,我們先使用object.seal()凍結再執(zhí)行修改name屬性,刪除age屬性的操作,最后打印我們會發(fā)現(xiàn)name屬性成功被修改,但是age屬性沒有被刪除,這就是和freeze()不一樣的地方,即可以修改屬性值,但是不可以刪除屬性值,當然同樣它還有一個檢驗對象凍結的方法即Object.isSealed,返回值為布爾值,最后還有一種凍結的方法即Object.preventExtensions()
Object.preventExtensions
Object.preventExtensions是凍結對象增加屬性的能力
var obj = {
name : "cxy",
age : "18"
}
const iceObj = Object.preventExtensions(obj)
iceObj.weight = "180"
console.log(iceObj)上述代碼是為obj新增weight屬性,但是打印出來后并沒有出現(xiàn)該屬性,說明對象添加屬性方法被凍結了。
到此這篇關于簡述凍結JS對象方法技術的文章就介紹到這了,更多相關凍結JS對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript數(shù)據(jù)結構之優(yōu)先隊列與循環(huán)隊列實例詳解
這篇文章主要介紹了JavaScript數(shù)據(jù)結構之優(yōu)先隊列與循環(huán)隊列,結合實例形式較為詳細的分析了javascrip數(shù)據(jù)結構中優(yōu)先隊列與循環(huán)隊列的原理、定義與使用方法,需要的朋友可以參考下2017-10-10
JS實現(xiàn)滑動菜單效果代碼(包括Tab,選項卡,橫向等效果)
這篇文章主要介紹了JS實現(xiàn)滑動菜單效果代碼,以實例形式實現(xiàn)了包括Tab,選項卡,橫向等效果,非常簡單實用,需要的朋友可以參考下2015-09-09
js實現(xiàn)將json數(shù)組顯示前臺table中
本文主要介紹了把JSON數(shù)組顯示在前臺的table中的方法。具有一定的參考價值,下面跟著小編一起來看下吧2017-01-01

