国产精品美女久久久浪潮AV,国产精品三级一二三区,久久精品国产一区二区小说 ,依依成人影视国产精品,全部无卡免费的毛片在线看,日本一区二区三深夜不卡,国产精品女同一区二区久久,国产精品夜色一区二区三区

        JavaScript 對象可以做到的三件事

        2020-5-12    seo達人

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

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


        內(nèi)部屬性不能動態(tài)地添加到現(xiàn)有對象。


        內(nèi)部屬性可以在某些內(nèi)置 JavaScript 對象中使用,它們存儲ECMAScript規(guī)范指定的內(nèi)部狀態(tài)。


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


        [[Prototype]] — 對象的原型,可以為null或?qū)ο?

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

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

        2. 屬性描述符對象

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


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


        屬性 解釋 默認值

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

        能否修改屬性的特性;

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

        [[Enumerable]] 能否通過for-in循環(huán)返回屬性 true

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

        [[Value]] 包含這個屬性的數(shù)據(jù)值 undefined

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


        let foo = {

         a: 1

        }

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


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


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


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


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


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


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


        let foo = {

         a: 1

        }

        Object.defineProperty(foo, 'b', {

         value: 2,

         writable: true,

         enumerable: true,

         configurable: true,

        });

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


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


        let foo = {

         a: 1

        }

        Object.defineProperty(foo, 'a', {

         value: 2,

         writable: false,

         enumerable: true,

         configurable: true,

        });

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


        foo.a = 2;

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


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


        'use strict'

        let foo = {

         a: 1

        }


        Object.defineProperty(foo, 'b', {

         get() {

           return 1;

         }

        })

        當我們這樣寫的時候:


        foo.b = 2;

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


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

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


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


        const proto = Object.defineProperties({}, {

         a: {

           value: 1,

           writable: false

         }

        })


        const foo = Object.create(proto)

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


        如果我們這樣寫:


        foo.a = 2;

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


        總結(jié)

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


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


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


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


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

        日歷

        鏈接

        個人資料

        藍藍設(shè)計的小編 http://m.shtzxx.cn

        存檔

        主站蜘蛛池模板: 娇妻系列交换27部多p在线观看| 婷婷色香五月综合激激情| 野花韩国免费观看| 婷婷国产成人精品视频| 东安县| 99精品国产99久久久久久97| 人妻体体内射精一区二区| 无遮挡色视频免费观看| 欧美成人怡红院一区二区| 少妇被多人c夜夜爽爽av| 朋友的妻子| 神农架林区| 美丽小蜜桃在线观看| 泸州市| 亚洲精品久久久蜜桃| 亚洲精品无码av中文字幕| 丁香花在线| 久久天天躁夜夜躁狠狠85| ā片免费观看| 人人澡人人透人人爽| 一个色的导航| 在线观看+亚洲| 综合自拍亚洲综合图区欧美| 男人的天堂av.com| 保山市| 国产成人精品一区二区三区免费 | 15gay男同志同性1069| 锡林郭勒盟| 欧美成人看片一区二三区图文| 老熟女一区二区免费| 人人玩人人添人人澡超碰| 99久久久无码国产精品免费| 国产婷婷精品av在线| 中文无码熟妇人妻av在线| yin荡护士揉捏乱p办公室视频| 幻女free性俄罗斯毛片| 精品国产三级a在线观看| 国模大胆一区二区三区| 陕西省| 亚洲中文字幕在线观看| 美女视频黄的全免费视频 |