當前位置:成語大全網 - 新華字典 - JS 對象(Object)的深入解析—私有屬性

JS 對象(Object)的深入解析—私有屬性

JS中萬物都是對象,今天就深度講壹下Object的裏面到底有什麽。文章主要講對象的自有屬性和原型中的屬性,至於原型鏈就不在這篇文章多講了。

創建對象的方法有如下幾種

Object.assign() 方法用於將其他對象的可枚舉屬性復制到目標對象(即第壹個參數對象)

常用於將某個對象合並到新對象{}。

常用於繼承某個構造函數的原型屬性,但是不能繼承該構造函數的實例屬性,例如上面例子

該屬性是實現vue雙向數據綁定的核心,這裏主要講它的使用方法。

講它的相關用法時,就得先理解 的概念。

1.數據屬性

數據屬性的四個特性

configurable: 表示是否能被delete刪除屬性且能重新定義該屬性。

enumerable: 表示能否通過for-in遍歷的屬性。

writable: 表示是否能修改屬性。

value: 屬性的值。

2.訪問器屬性

數據屬性不包含數據值,包含壹對get和set的核心方法,在讀取訪問器屬性時,就是通過這兩個方法進行操作處理的。

訪問器屬性的四個特性

configurable: 表示是否能被delete刪除屬性且能重新定義該屬性。

enumerable: 表示能否通過for-in遍歷的屬性。

get: 讀取屬性時調用的方法,默認值是undefined。

set: 寫入屬性時調用的方法,默認值是undefined。

從圖中可以看到訪問器屬性的configurable和enumerable兩個屬性的默認值都是false,如果後面要對該訪問器屬性進行delete刪除時,將configurable轉化成true即可。

從圖可以看出該對象具有四個屬性,

(defineProperty、defineProperties、getOwnPropertyDescriptor、getOwnPropertyDescriptors)

這四個屬性是分為兩對:defineProperty vs getOwnPropertyDescriptor、defineProperties vs getOwnPropertyDescriptors。

意思為屬性設置和屬性的獲取解析,第壹對上面講過了,這裏就大概說壹下第二對的意思,也就是支持設置對個屬性,獲取多個屬性的意思。

Object.defineProperties()

Object.getOwnPropertyDescriptors()

打印出對象的所有屬性

Object.entries() 方法返回壹個給定對象

Object轉Map

new Map()構造函數接受壹個二維數組,而Object.entries()方法生成壹個二維數組,所以對象、數組、字數串轉化為Map結構變得簡單。

正常對象的數據屬性都可以被 但是通過以下方法,改變了數據屬性的四大特性。

相對應的檢測方法,返回Boolean。

舉例

Object.freeze()方法可凍結對象,凍結後,對象屬性不能刪除,修改以及添加,只能for...in讀取。

該對象方法和==與===運算符相似,但是有明顯區別。

Object.is與==比較

== 會將兩邊的操作數進行隱式轉化,之後再進行比較,但是Object.is就不會進行轉化。

Object.is與===比較

=== NaN和NaN不等,-0與+0相等,但是Object.is就認為NaN和NaN是相等,而-0和+0是不相等的。

所以總的來說這兩個的相似程度比== 運算符更相近。

Object.keys()返回壹個 名稱(鍵)的數組

Object.values()返回可枚舉屬性值得數組

Object.setPrototypeOf(obj, prototype)

為對象obj設置新的原型對象。

註意

如果對象的[[Prototype]]被修改成不可擴展(通過 Object.isExtensible() 查看),就會拋出 TypeError 異常。如果 prototype 參數不是壹個對象或者 null (例如,數字,字符串,boolean,或者 undefined ),則什麽都不做。否則,該方法將 obj 的 [[Prototype]] 修改為新的值。

下篇文章 JS 對象(Object)的深入解析—原型屬性