JavaScript?對(duì)象新增方法defineProperty與keys的使用說(shuō)明
文章導(dǎo)讀:
這篇文章給大家講解在 ES5 中對(duì)象新增的兩個(gè)常用方法:defineProperty(),keys(),
這兩個(gè)方法可以讓我們更方便的操作對(duì)象,獲取對(duì)象屬性,賦值修改等等操作,最重要的是,這些方法可以讓我們?cè)O(shè)置無(wú)法修改對(duì)象屬性值,下面跟我一起了解一下吧!
一:Object.defineProperty()
Object.defineProperty() 可以用來(lái)定義對(duì)象的新屬性和修改屬性值,設(shè)置屬性值是否可修改(重點(diǎn))等等,該方法共有三個(gè)參數(shù)
1.1 參數(shù)說(shuō)明
Object.defineProperty( obj, prop, descriptor )
參數(shù) | obj | prop | descriptor |
含義 | 要操作的對(duì)象名稱(chēng) | 對(duì)象中要操作的某個(gè)屬性的名稱(chēng) | 這個(gè)參數(shù)有四個(gè)特性,該參數(shù)以對(duì)象形式書(shū)寫(xiě),詳細(xì)寫(xiě)法說(shuō)明如下 |
1.2 第三個(gè)參數(shù) descriptor 的說(shuō)明
其參數(shù)以對(duì)象形式書(shū)寫(xiě),其內(nèi)部有四個(gè)特性,例如修改值的操作,設(shè)置是否可重寫(xiě),設(shè)置是否可枚舉,是否可修改特性等等......
1.3 實(shí)際使用
1.3.1 writable 特性
writeable 特性可以設(shè)置一個(gè)屬性是否可被重寫(xiě),true 為可重寫(xiě),false 為不可重寫(xiě),使用 defineProperty 新添加的屬性默認(rèn)為 false
<script> var dog={ 'name':'旺財(cái)', 'age':5 } Object.defineProperty(dog,'sex',{ value:'公', writable:false }) dog.sex='母' //更改屬性值看其是否改變 console.log(dog); </script>
可以看到我們雖然更改了 sex 的值,但是打印結(jié)果沒(méi)有被更改 ,說(shuō)明 writable : false 屬性成功使其屬性值不能重寫(xiě),功能十分強(qiáng)大是不是!
注意事項(xiàng):如果是使用 defineProperty 新添加的屬性,那么 writable 默認(rèn)為 false 不可修改,如果是本身就有的屬性而去修改值,那其仍可以修改
1.3.2 enumerable 特性
enumerable 特性可以設(shè)置某個(gè)屬性是否可被枚舉,true 為可枚舉,false 為不可枚舉,使用 defineProperty 新添加的屬性默認(rèn)為 false
<script> var dog={ 'name':'旺財(cái)', 'age':5 } Object.defineProperty(dog,'sex',{ value:'公', enumerable:false }) console.log(Object.keys(dog)); </script>
可以看到我們遍歷得不到設(shè)置過(guò) enumerable:false 特性的屬性 sex,證明了 false 不可枚舉
注意事項(xiàng):如果是使用 defineProperty 新添加的屬性,那么 enumerable 默認(rèn)為 false 不可枚舉,如果是本身就有的屬性而去修改值,那其仍可以枚舉
1.3.3 configurable 特性
configurable 特性可以設(shè)置某個(gè)屬性是否可被修改(刪除),true 為可修改,false 為不可修改,使用 defineProperty 新添加的屬性默認(rèn)為 false
configurable 特性的參數(shù)只能設(shè)置一次,第二次設(shè)置會(huì)無(wú)效?。?/p>
<script> var dog={ 'name':'旺財(cái)', 'age':5, } Object.defineProperty(dog,'sex',{ value:'公', configurable : false }) delete dog.sex console.log(dog); </script>
可以看到我們刪除不了設(shè)置過(guò) configurable:false 特性的屬性 sex,證明了 false 不可修改
注意事項(xiàng):如果是使用 defineProperty 新添加的屬性,那么 configurable 默認(rèn)為 false 不可修改,如果是本身就有的屬性而去修改值,那其仍可以修改
二:Object.keys()
keys() 可以用來(lái)獲取對(duì)象的屬性名,參數(shù)為要操作的對(duì)象名稱(chēng)。其返回一個(gè)數(shù)組元素為屬性名的新數(shù)組(故需要定義一個(gè)數(shù)組去接收)
Object.keys( obj )
<script> var dog={ 'name':'旺財(cái)', 'age':5, 'sex':'公' } var arr=Object.keys(dog) console.log(arr); </script>
成功返回了對(duì)象的屬性名稱(chēng)
到此這篇關(guān)于JavaScript 對(duì)象新增方法 defineProperty 與 keys 的使用說(shuō)明的文章就介紹到這了,更多相關(guān)JS defineProperty與keys 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)導(dǎo)航欄和內(nèi)容上下聯(lián)動(dòng)功能代碼
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)導(dǎo)航欄和內(nèi)容上下聯(lián)動(dòng)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06小程序?qū)崿F(xiàn)新用戶判斷并跳轉(zhuǎn)激活的方法
這篇文章主要介紹了小程序?qū)崿F(xiàn)新用戶判斷并跳轉(zhuǎn)激活的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05uniapp實(shí)現(xiàn)下拉刷新的幾種方式小結(jié)
原生的uniapp的下拉刷新是一個(gè)普通的加載框,樣式真的很單一,下面這篇文章主要總結(jié)介紹了uniapp實(shí)現(xiàn)下拉刷新的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02快速解決select2在bootstrap模態(tài)框中下拉框隱藏的問(wèn)題
今天小編就為大家分享一篇快速解決select2在bootstrap模態(tài)框中下拉框隱藏的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08JavaScript 學(xué)習(xí)小結(jié)(適合新手參考)
JavaScript常量又稱(chēng)字面常量,是固化在程序代碼中的信息。變量的主要作用是存取數(shù)據(jù),提供一個(gè)存取信息的容器。2009-07-07JavaScript 實(shí)現(xiàn)模態(tài)對(duì)話框 源代碼大全
對(duì)話框在Windows應(yīng)用程序中使用非常普遍,許多應(yīng)用程序的設(shè)定,與用戶交互需要通過(guò)對(duì)話框來(lái)進(jìn)行,因此對(duì)話框是Windows應(yīng)用程序中最重要的界面元素之一,是與用戶交互的重要手段。2009-05-05js獲取當(dāng)前時(shí)間顯示在頁(yè)面上并每秒刷新
這篇文章主要介紹了js獲取當(dāng)前時(shí)間顯示在頁(yè)面上并每秒刷新,需要的朋友可以參考下2014-12-12JS生成某個(gè)范圍的隨機(jī)數(shù)【四種情況詳解】
下面小編就為大家?guī)?lái)一篇JS生成某個(gè)范圍的隨機(jī)數(shù)【四種情況詳解】。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧2016-04-04