當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JS面向对象——Object.defineProperty
生活随笔
收集整理的這篇文章主要介紹了
JS面向对象——Object.defineProperty
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、JavaScript的面向?qū)ο?/h2>
JavaScript其實支持多種編程范式的,包括函數(shù)式編程和面向?qū)ο缶幊?#xff1a;
- JavaScript中的對象被設(shè)計成一組屬性的無序集合,像是一個哈希表,有key和value組成;
- key是一個標識符名稱,value可以是任意類型,也可以是其他對象或者函數(shù)類型;
- 如果值是一個函數(shù),那么我們可以稱之為是對象的方法;
如何創(chuàng)建一個對象呢?
早期使用創(chuàng)建對象的方式最多的是使用Object類,并且使用new關(guān)鍵字來創(chuàng)建一個對象:
- 這是因為早期很多JavaScript開發(fā)者是從Java過來的,它們也更習慣于Java中通過new的方式創(chuàng)建一個對象;
后來很多開發(fā)者為了方便起見,都是直接通過字面量的形式來創(chuàng)建對象:
- 這種形式看起來更加的簡潔,并且對象和屬性之間的內(nèi)聚性也更強,所以這種方式后來就流行了起來;
二、對屬性操作的控制
在前面我們的屬性都是直接定義在對象內(nèi)部,或者直接添加到對象內(nèi)部的:
- 但是這樣來做的時候我們就不能對這個屬性進行一些限制:比如這個屬性是否是可以通過delete刪除呢?這個屬性是否在for-in遍歷的時候被遍歷出來呢?
如果我們想要對一個屬性進行比較精準的操作控制,那么我們就可以使用屬性描述符。
- 通過屬性描述符可以精準的添加或修改對象的屬性;
- 屬性描述符需要使用 Object.defineProperty 來對屬性進行添加或者修改;
三、Object.defineProperty
Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象。
可接收三個參數(shù):
- obj要定義屬性的對象;
- prop要定義或修改的屬性的名稱或 Symbol;
- descriptor要定義或修改的屬性描述符;
返回值:
- 被傳遞給函數(shù)的對象。
四、屬性描述符分類
屬性描述符的類型有兩種:
- 數(shù)據(jù)屬性(Data Properties)描述符(Descriptor);
- 存取屬性(Accessor訪問器 Properties)描述符(Descriptor);
五、數(shù)據(jù)屬性描述符
六、存取屬性描述符
七、同時定義多個屬性
Object.defineProperties() 方法直接在一個對象上定義 多個 新的屬性或修改現(xiàn)有屬性,并且返回該對象。
八、對象方法補充
獲取對象的屬性描述符:
- getOwnPropertyDescriptor
- getOwnPropertyDescriptors
禁止對象擴展新屬性:preventExtensions
- 給一個對象添加新的屬性會失敗(在嚴格模式下會報錯);
密封對象,不允許配置和刪除屬性:seal
- 實際是調(diào)用preventExtensions
- 并且將現(xiàn)有屬性的configurable:false
凍結(jié)對象,不允許修改現(xiàn)有屬性: freeze
- 實際上是調(diào)用seal
- 并且將現(xiàn)有屬性的writable: false
總結(jié)
以上是生活随笔為你收集整理的JS面向对象——Object.defineProperty的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Express框架实现原理
- 下一篇: 三、Express 路由