成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript 對(duì)象可以做到的三件事

開發(fā) 前端
除了普通的對(duì)象屬性賦值和遍歷之外,我們還可以使用 JavaScript 對(duì)象執(zhí)行許多其他操作。在本文中,我們將了解如何使用它們,包括訪問內(nèi)部屬性、操作屬性描述符和繼承只讀屬性。

除了普通的對(duì)象屬性賦值和遍歷之外,我們還可以使用 JavaScript 對(duì)象執(zhí)行許多其他操作。在本文中,我們將了解如何使用它們,包括訪問內(nèi)部屬性、操作屬性描述符和繼承只讀屬性。

1. 訪問內(nèi)部屬性

JavaScript 對(duì)象無法以常規(guī)方式訪問的「內(nèi)部屬性」。「內(nèi)部屬性」名由雙方括號(hào)[[]]包圍,在創(chuàng)建對(duì)象時(shí)可用。

  • 「內(nèi)部屬性」不能動(dòng)態(tài)地添加到現(xiàn)有對(duì)象。
  • 「內(nèi)部屬性」可以在某些內(nèi)置 JavaScript 對(duì)象中使用,它們存儲(chǔ)ECMAScript規(guī)范指定的內(nèi)部狀態(tài)。

有兩種「內(nèi)部屬性」,一種操作對(duì)象的方法,另一種是存儲(chǔ)數(shù)據(jù)的方法。例如:

  • [[Prototype]] — 對(duì)象的原型,可以為null或?qū)ο?/li>
  • [[Extensible]] — 表示是否允許在對(duì)象中動(dòng)態(tài)添加新的屬性
  • [[PrivateFieldValues]] — 用于管理私有類字段

2. 屬性描述符對(duì)象

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

數(shù)據(jù)屬性有4個(gè)描述其行為的特性(為了表示內(nèi)部值,把屬性放在兩對(duì)方括號(hào)中),稱為「描述符對(duì)象」。

value 描述符是屬性的數(shù)據(jù)值,例如,我們有以下對(duì)象 :

  1. let foo = { 
  2.   a: 1 

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

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

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

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

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

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

在創(chuàng)建新對(duì)象, 我們可以使用Object.defineProperty方法設(shè)置的描述符,如下所示:

  1. let foo = { 
  2.   a: 1 
  3. Object.defineProperty(foo, 'b', { 
  4.   value: 2, 
  5.   writable: true, 
  6.   enumerable: true, 
  7.   configurable: true, 
  8. }); 

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

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

  1. let foo = { 
  2.   a: 1 
  3. Object.defineProperty(foo, 'a', { 
  4.   value: 2, 
  5.   writable: false, 
  6.   enumerable: true, 
  7.   configurable: true, 
  8. }); 

這樣當(dāng)我們嘗試給 foo.a 賦值時(shí),如:

  1. foo.a = 2

如果關(guān)閉了嚴(yán)格模式,瀏覽器將忽略,否則將拋出一個(gè)錯(cuò)誤,因?yàn)槲覀儗?writable 設(shè)置為 false, 表示該屬性不可寫。

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

  1. 'use strict' 
  2. let foo = { 
  3.   a: 1 
  4.  
  5. Object.defineProperty(foo, 'b', { 
  6.   get() { 
  7.     return 1; 
  8.   } 
  9. }) 

當(dāng)我們這樣寫的時(shí)候:

  1. foo.b = 2

因?yàn)閎屬性是getter屬性,所以當(dāng)使用嚴(yán)格模式時(shí),我們會(huì)得到一個(gè)錯(cuò)誤:Getter 屬性不能重新賦值。

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

繼承的只讀屬性不能再賦值。這是有道理的,因?yàn)槲覀冞@樣設(shè)置它,它是繼承的,所以它應(yīng)該傳播到繼承屬性的對(duì)象。

我們可以使用Object.create創(chuàng)建一個(gè)從原型對(duì)象繼承屬性的對(duì)象,如下所示:

  1. const proto = Object.defineProperties({}, { 
  2.   a: { 
  3.     value: 1, 
  4.     writable: false 
  5.   } 
  6. }) 
  7.  
  8. const foo = Object.create(proto) 

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

如果我們這樣寫:

  1. foo.a = 2

在嚴(yán)格模式下,我們會(huì)收到錯(cuò)誤消息。

總結(jié)

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

首先,某些 JavaScript 對(duì)象(例如內(nèi)置瀏覽器對(duì)象)具有內(nèi)部屬性,這些屬性由雙方括號(hào)包圍,它們具有內(nèi)部狀態(tài),對(duì)象創(chuàng)建無法動(dòng)態(tài)添加。

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

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

最后,繼承的只讀屬性保持只讀狀態(tài),這是有道理的,因?yàn)樗菑母冈蛯?duì)象繼承而來的。

本文轉(zhuǎn)載自微信公眾號(hào)「大遷世界」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系大遷世界公眾號(hào)。

 

責(zé)任編輯:趙寧寧 來源: 大遷世界
相關(guān)推薦

2010-08-30 09:21:20

2013-07-01 10:21:26

阿里大數(shù)據(jù)

2020-08-06 18:11:15

SaaS

2015-05-13 09:21:27

開源項(xiàng)目管理項(xiàng)目管理

2020-03-05 17:50:00

智慧社區(qū)智能

2022-09-20 09:33:51

無線空中下載技術(shù)OTA

2018-12-20 07:33:09

數(shù)據(jù)中心運(yùn)維管理

2022-03-31 14:28:43

數(shù)據(jù)安全企業(yè)數(shù)據(jù)保護(hù)

2024-05-31 08:00:59

2019-05-14 13:52:26

云計(jì)算物聯(lián)網(wǎng)收集數(shù)據(jù)

2020-04-13 10:18:00

云計(jì)算安全IT

2017-05-11 14:16:58

虛擬化存儲(chǔ)解決方案

2020-03-18 10:57:16

CIO 肺炎技術(shù)

2019-12-12 15:40:08

物聯(lián)網(wǎng)數(shù)字健康自動(dòng)化

2021-07-12 23:21:52

MyISAM引擎InnoDB

2015-06-23 13:22:17

桌面云深信服

2023-07-10 10:25:51

CIOCFO

2013-03-08 09:33:10

和信虛擬終端

2017-12-06 22:15:49

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产免费一区二区 | 久久久91 | 久久久成人精品 | 中文字幕在线一区 | 黄色毛片在线观看 | 色综合一区二区三区 | 玖玖国产 | 艹逼网| jav成人av免费播放 | 中文字幕在线网 | 午夜小视频在线观看 | 国产有码 | 男人天堂午夜 | 成人三级av | 日本粉嫩一区二区三区视频 | 美国十次成人欧美色导视频 | 密桃av| 精品日韩在线 | 国产美女一区二区 | 99精品国产一区二区三区 | 人人精品 | 欧美精品一二三 | 免费国产黄网站在线观看视频 | 成av在线| 国产免费拔擦拔擦8x高清 | 男人电影天堂 | 热久久999 | 国产电影一区 | 精品国产乱码久久久久久1区2区 | 精品日韩 | 欧美性tv | 成人一区二区三区在线观看 | 九热在线 | 激情一区二区三区 | 成人毛片一区二区三区 | 成人福利网 | av夜夜操 | 欧区一欧区二欧区三免费 | 天天人人精品 | 一级在线 | 国产特级毛片 |