91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript對象使用方法

發布時間:2020-06-09 09:42:47 來源:億速云 閱讀:202 作者:Leah 欄目:web開發

JavaScript對象可以做什么?一般大家對JavaScript對象的了解可能停留在概念的層面上,而對于JavaScript對象使用方法了解相對較少。今天就跟大家聊聊JavaScript對象使用方法。

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

1. 訪問內部屬性

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

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

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

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

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

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

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

2. 屬性描述符對象


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

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

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更改屬性的屬性描述符,它還用于添加新屬性及其屬性描述符。

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

看完上述內容,你們對JavaScript對象的應用有進一步的了解嗎?如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江阴市| 诸城市| 湟中县| 宁化县| 广东省| 磐安县| 棋牌| 淮南市| 常熟市| 岳阳市| 乌恰县| 宜都市| 阿勒泰市| 全州县| 特克斯县| 鹤峰县| 会同县| 柞水县| 鄯善县| 高碑店市| 丽水市| 延寿县| 常州市| 安福县| 镇平县| 乐平市| 前郭尔| 普兰店市| 固阳县| 观塘区| 织金县| 宁乡县| 启东市| 和政县| 万盛区| 宿迁市| 梁河县| 乌拉特前旗| 银川市| 泰顺县| 灵川县|