• <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <small id="ggggg"></small> <sup id="ggggg"></sup>
    <noscript id="ggggg"><dd id="ggggg"></dd></noscript>
    <tfoot id="ggggg"></tfoot>
  • <nav id="ggggg"><cite id="ggggg"></cite></nav>
    <nav id="ggggg"></nav>
    成人黃色A片免费看三更小说,精品人妻av区波多野结衣,亚洲第一极品精品无码,欧美综合区自拍亚洲综合,久久99青青精品免费观看,中文字幕在线中字日韩 ,亚洲国产精品18久久久久久,黄色在线免费观看

    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.lzhte.cn

    存檔

    主站蜘蛛池模板: 国产精品国产AV片国产| 欧美肏屄| 亚洲国产精品国自产电影| 一二三四视频社区在线播放中国| 庆城县| 日韩精品免费自拍视频| 亚洲综合激情另类专区| 手机在线观看h中文字幕| 四虎永久精品免费视频| 国产又色又爽又黄的网站在线| 国产亚洲自在精品久久| 久久国产自偷自偷免| 亚洲男人天堂2018| 自慰高潮喷白浆在线观看| 久久精品国产线看观看亚洲| 国产女主播精品一区二区三区 | 在线看A片| 国产精品videossex久久发布| 亚洲人成网站日本片| 国产欧美va欧美va香蕉在线观看| 美国三级无码不卡中文字幕在线观看 | 欧美日韩一本大道香蕉| 久久无码av一区二区三区| 国产日韩欧美精品一区二区三区| 日韩欧美中文字幕热| 亚洲国产成人久久综合碰碰| 亚洲免费人成在线视频观看 | 国产一区二区三区在线观看视频| 亚洲热视频在线观看| 女同二区| 欧美性爱xxxx| 日本爱爱精品一区二区| 日本免费一区二区三区中文| 欧美成人国产精品高潮| 91啪免费网站在线观看| 亚洲国产精品不伦不卡| 无码人妻精品一区二区三| 久久国产乱子伦精品在| 国产人成精品香港三级古代| 婷婷丁香五月天永久在线| 无遮挡国产高潮视频免费观看|