97国产精品视频人人做人人爱,3344在线观看无码,成年人国产视频,欧美日一级片,在线看AV天堂,高清无码一本到东京热,欧美一级黄片一区2区,免费又爽又刺激高潮网址

JavaScript 對象可以做到的三件事

2020-5-12    seo達人

1. 訪問內部屬性

JavaScript 對象無法以常規方式訪問的內部屬性。內部屬性名由雙方括號[[]]包圍,在創建對象時可用。


內部屬性不能動態地添加到現有對象。


內部屬性可以在某些內置 JavaScript 對象中使用,它們存儲ECMAScript規范指定的內部狀態。


有兩種內部屬性,一種操作對象的方法,另一種是存儲數據的方法。例如:


[[Prototype]] — 對象的原型,可以為null或對象

[[Extensible]] — 表示是否允許在對象中動態添加新的屬性

[[PrivateFieldValues]] — 用于管理私有類字段

2. 屬性描述符對象

數據屬性包含了一個數據值的位置,在這個位置可以讀取和寫入值。也就是說,數據屬性可以通過 對象.屬性 訪問,就是我么平常接觸的用戶賦什么值,它們就返回什么,不會做額外的事情。


數據屬性有4個描述其行為的特性(為了表示內部值,把屬性放在兩對方括號中),稱為描述符對象。


屬性 解釋 默認值

[[Configurable]] 能否通過delete刪除屬性從而重新定義屬性;

能否修改屬性的特性;

能否把屬性修改為訪問器屬性 true

[[Enumerable]] 能否通過for-in循環返回屬性 true

[[Writable]] 能否修改屬性的值 true

[[Value]] 包含這個屬性的數據值 undefined

value 描述符是屬性的數據值,例如,我們有以下對象 :


let foo = {

 a: 1

}

那么,a 的value屬性描述符為1。


writable是指該屬性的值是否可以更改。 默認值為true,表示屬性是可寫的。 但是,我們可以通過多種方式將其設置為不可寫。


configurable 的意思是可以刪除對象的屬性還是可以更改其屬性描述符。 默認值為true,這意味著它是可配置的。


enumerable 意味著它可以被for ... in循環遍歷。 默認值為true,說明能通過for-in循環返回屬性


將屬性鍵添加到返回的數組之前,Object.keys方法還檢查enumerable 描述符。 但是,Reflect.ownKeys方法不會檢查此屬性描述符,而是返回所有自己的屬性鍵。


Prototype描述符有其他方法,get和set分別用于獲取和設置值。


在創建新對象, 我們可以使用Object.defineProperty方法設置的描述符,如下所示:


let foo = {

 a: 1

}

Object.defineProperty(foo, 'b', {

 value: 2,

 writable: true,

 enumerable: true,

 configurable: true,

});

這樣得到foo的新值是{a: 1, b: 2}。


我們還可以使用defineProperty更改現有屬性的描述符。 例如:


let foo = {

 a: 1

}

Object.defineProperty(foo, 'a', {

 value: 2,

 writable: false,

 enumerable: true,

 configurable: true,

});

這樣當我們嘗試給 foo.a 賦值時,如:


foo.a = 2;

如果關閉了嚴格模式,瀏覽器將忽略,否則將拋出一個錯誤,因為我們將 writable 設置為 false, 表示該屬性不可寫。


我們還可以使用defineProperty將屬性轉換為getter,如下所示:


'use strict'

let foo = {

 a: 1

}


Object.defineProperty(foo, 'b', {

 get() {

   return 1;

 }

})

當我們這樣寫的時候:


foo.b = 2;

因為b屬性是getter屬性,所以當使用嚴格模式時,我們會得到一個錯誤:Getter 屬性不能重新賦值。


3.無法分配繼承的只讀屬性

繼承的只讀屬性不能再賦值。這是有道理的,因為我們這樣設置它,它是繼承的,所以它應該傳播到繼承屬性的對象。


我們可以使用Object.create創建一個從原型對象繼承屬性的對象,如下所示:


const proto = Object.defineProperties({}, {

 a: {

   value: 1,

   writable: false

 }

})


const foo = Object.create(proto)

在上面的代碼中,我們將proto.a的 writable 描述符設置為false,因此我們無法為其分配其他值。


如果我們這樣寫:


foo.a = 2;

在嚴格模式下,我們會收到錯誤消息。


總結

我們可以用 JavaScript 對象做很多我們可能不知道的事情。


首先,某些 JavaScript 對象(例如內置瀏覽器對象)具有內部屬性,這些屬性由雙方括號包圍,它們具有內部狀態,對象創建無法動態添加。


JavaScript對象屬性還具有屬性描述符,該屬性描述符使我們可以控制其值以及可以設置它們的值,還是可以更改其屬性描述符等。


我們可以使用defineProperty更改屬性的屬性描述符,它還用于添加新屬性及其屬性描述符。


最后,繼承的只讀屬性保持只讀狀態,這是有道理的,因為它是從父原型對象繼承而來的。

日歷

鏈接

個人資料

藍藍設計的小編 http://m.0391cbd.com

存檔

主站蜘蛛池模板: 国产无码高清视频不卡| 香蕉网久久| 国产玖玖视频| 久久综合成人| 国产高颜值露脸在线观看| 国产在线自乱拍播放| 2021亚洲精品不卡a| 毛片免费在线视频| 99久久免费精品特色大片| 国产一级妓女av网站| 国产毛片高清一级国语| 色天堂无毒不卡| 九色视频线上播放| 在线a网站| 国产在线拍偷自揄观看视频网站| 精品视频在线一区| 99国产在线视频| 一级成人a做片免费| 日韩精品无码不卡无码| 亚洲欧美日韩综合二区三区| 国产国产人在线成免费视频狼人色| 精品亚洲欧美中文字幕在线看| 国产人成在线视频| 538国产视频| 久久黄色视频影| 久久国产拍爱| 精品欧美一区二区三区久久久| 在线观看视频99| 国产欧美亚洲精品第3页在线| 亚洲一区二区约美女探花| 亚洲va精品中文字幕| 亚洲日韩久久综合中文字幕| 久久久久久午夜精品| 超碰91免费人妻| 国产日本欧美亚洲精品视| 日韩毛片免费| 欧美精品高清| 一级毛片无毒不卡直接观看| 日本精品一在线观看视频| 日本一区二区三区精品国产| 欧美啪啪网| jizz国产在线| 制服无码网站| 孕妇高潮太爽了在线观看免费| 亚洲精品天堂在线观看| 国产伦精品一区二区三区视频优播| 久久精品国产在热久久2019| 国产男女免费完整版视频| 久久久久亚洲AV成人人电影软件| 毛片基地美国正在播放亚洲| 人妻熟妇日韩AV在线播放| 日本精品中文字幕在线不卡 | 亚洲中文字幕久久精品无码一区| 91成人免费观看在线观看| 欧美高清日韩| 国产一级在线播放| 天天躁夜夜躁狠狠躁图片| h网址在线观看| 亚洲一区二区三区国产精品| 国产成人综合在线观看| 国产99欧美精品久久精品久久| 99热最新在线| 精品视频一区在线观看| 露脸一二三区国语对白| 久久久久久国产精品mv| 国产一区二区三区日韩精品| 91精选国产大片| 麻豆AV网站免费进入| 国产成本人片免费a∨短片| 欧美精品伊人久久| 欧美亚洲一二三区| 韩日无码在线不卡| 欧美激情视频在线观看一区| 日韩无码黄色网站| 欧美一级在线看| 亚洲国产日韩欧美在线| 天堂网亚洲系列亚洲系列| 国产亚洲欧美在线中文bt天堂 | 综合网久久| 国产网站黄| 国产拍在线| 国产美女精品一区二区|