• <abbr id="chdyf"></abbr>
    <ruby id="chdyf"><acronym id="chdyf"><meter id="chdyf"></meter></acronym></ruby>
    <bdo id="chdyf"></bdo>
    <dfn id="chdyf"><menu id="chdyf"></menu></dfn>
    1. <menuitem id="chdyf"></menuitem><strong id="chdyf"><menu id="chdyf"></menu></strong>

      <rt id="chdyf"><menu id="chdyf"></menu></rt>
      成人小说一区二区三区,伊人精品成人久久综合全集观看,久久HEZYO色综合,中文字幕精品人妻熟女,影音先锋成人网站,我要看免费一级毛片,中国女人做爰A片,中文字幕av久久爽Av

      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://www.wtxcl.cn

      存檔

      主站蜘蛛池模板: 国产精品自在拍99| 黑人与亚洲av| 亚洲中文自拍| 被黑人做的白浆直流在线播放| 亚洲在线一区二区| 汉沽区| 久久人人爽人人人人爽AV| 日本www色| 精品人妻一区二区三区在线视频不卡| 人妻av天堂一区二区| 亚洲人妻系列| 亚洲精品国产日韩| 99久久久国产精品免费无码专区| 另类综合30p| 粉嫩av中文一区二区三区| 免费一级毛片在线播放视频| 国产99久久精品一区二区| 在线中出| 人妻综合网| 乱人伦中文字幕在线不卡网站| 久草视频网站| jiZZjiZZ欧美69| 在线无码国产精品亚洲а∨| 嫩草院一区二区三区无码| 神木县| 国产亚洲情侣一区二区无码av | 黑人玩弄漂亮少妇高潮大叫| 911国产精品| 锡林浩特市| 精品自拍视频| 国产91视频一区| 国产精品XXX| 亚洲成人黄色| 中文屏幕乱码av| 亚洲一区二区三区久久综合| 98人妻| 夜夜国自一区| 欧美日韩亚洲一级在线一区| 综合av| 成人精品视频一区二区三区尤物| 欧美丝袜你懂的|