JavaScript Fortnight-Diary:對象基礎(chǔ)

本文是js紅寶書第八章總結(jié)

屬性的兩種類型

內(nèi)部特性用來描述屬性的特征谱轨,無法直接訪問(要通過訪問器)戒幔,以[[]]進(jìn)行標(biāo)識

特性就是為了某個(gè)概念而定義的專一的東西,不能把屬性看作是數(shù)據(jù)屬性+訪問器屬性組成的對象

  • 數(shù)據(jù)屬性
    • [[Configurable]]是否可以delete诗茎,是否可以改為訪問器屬性,一般為true
    • [[Enumberable]]是否可以通過for-in循環(huán)返回献汗,一般都是true
    • [[Writable]]值是否能被修改
    • [[Value]]

簡單點(diǎn)說敢订,這些特性用來描述
舉個(gè)例子:person.name = "lpj" name的數(shù)據(jù)屬性的[[value]]就是"lpj" ,但你不能直接用[]獲取罢吃,這些內(nèi)部特性是工具人,用來描述數(shù)據(jù)的
可以用Object.defineProperty方法進(jìn)行修改默認(rèn)值
注意:把屬性定義為不可配置后尿招,就不能變回可配置的了

  • 訪問器屬性
    不包含數(shù)據(jù)矾柜,包含一個(gè)獲取(getter)函數(shù)和設(shè)置(setter)函數(shù) 以下屬性描述他們的行為
    • [[Configurable]]
    • [[Enumerable]]
    • [[Get]]方法 讀取屬性值
    • [[Set]]方法 修改屬性值

典型訪問器屬性應(yīng)用場景怪蔑,即設(shè)置一個(gè)屬性值會(huì)導(dǎo)致一些變化發(fā)生

        let book = {
            year_:2021,//偽私有成員(指該屬性需用set函數(shù)進(jìn)行操作)
            edition:1
        }
        
        Object.defineProperty(book,"year",{
            /*這里會(huì)新增year屬性缆瓣,
            但由于使用了definePropert弓坞,
            這個(gè)屬性會(huì)被覆寫為如下的內(nèi)部特性(由于沒設(shè)置[[Value]] 它也就沒有數(shù)據(jù)值啦隧甚,單純是工具人訪問year_)*/
            get(){
            //簡單返回屬性值
                return this.year_;
            },
            set(newValue){
            //對寫入的值進(jìn)行處理 注意如果寫為空的話 就是只讀屬性了
                if (newValue>2021) {
                    this.year_ = newValue
                    this.edition++
                }
                else
                    this.year_ = newValue
            }
        })
        
        console.log(book.year)//值為2021,edition=1
        book.year = 2077;//嘗試修改year,會(huì)被Editon記錄菩帝,當(dāng)然這里你直接修改year_的話就沒轍了
        console.log(book.year)//edition=2

為什么console看對象時(shí)看不到原來的屬性值,而總是顯示最新的值茬腿?
Simply what it says is that the console evaluated the object just as you press the expand icon. Here is a test.
1:Type o = {} in the console. The output will be something like >{}. DON'T EXPAND YET!
2:Add a property to the o object. o.x = 1
3:Now go back and expand the previous output. It will have the x property you added obviously after that output was created. But the the output still have the x val
——Stack Overflow

可以通過Object.define-Properties()實(shí)現(xiàn)一次性同時(shí)定義多個(gè)多個(gè)屬性

  • ES6對象拓展方法
    • 通過getOwnPropertyDescriptor()讀取屬性的特性
    • 合并對象:Object.assign(dest, src)把src復(fù)制進(jìn)dest
    • 對象相等精確判定Object.is() 與===很像
    • 可計(jì)算屬性呼奢,es6可以在字面量直接進(jìn)行動(dòng)態(tài)命名屬性
let nameKey = name
let person = {
  [nameKey] = 'lpj'
}
console.log(person.name=='lpj')//true
//以前必須先聲明對象
//再person[nameKey] = 'hjy'這樣

這意味著可以使用復(fù)雜表達(dá)式甚至是函數(shù),但要小心表達(dá)式副作用切平,如果拋出錯(cuò)誤會(huì)導(dǎo)致對象創(chuàng)建中斷握础,且不可回滾

  • 對象解構(gòu)
let person = {
name:'pj',
age:19
}
//不使用解構(gòu)
let personName = person.name
let personAge = person.age
//使用解構(gòu)語法
let { name:personName , age: personAge} = person;
//注意冒號前后

解構(gòu)在紅寶書中篇幅蠻大的,其語法和用法比較多變

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悴品,一起剝皮案震驚了整個(gè)濱河市禀综,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苔严,老刑警劉巖定枷,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異届氢,居然都是意外死亡欠窒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門退子,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岖妄,“玉大人,你說我怎么就攤上這事寂祥〖雠埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵丸凭,是天一觀的道長福扬。 經(jīng)常有香客問我腕铸,道長,這世上最難降的妖魔是什么忧换? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任恬惯,我火速辦了婚禮,結(jié)果婚禮上亚茬,老公的妹妹穿的比我還像新娘酪耳。我一直安慰自己,他們只是感情好刹缝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布碗暗。 她就那樣靜靜地躺著,像睡著了一般梢夯。 火紅的嫁衣襯著肌膚如雪言疗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天颂砸,我揣著相機(jī)與錄音噪奄,去河邊找鬼。 笑死人乓,一個(gè)胖子當(dāng)著我的面吹牛勤篮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播色罚,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼碰缔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戳护?” 一聲冷哼從身側(cè)響起金抡,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腌且,沒想到半個(gè)月后梗肝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铺董,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年统捶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄粹。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喘鸟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驻右,到底是詐尸還是另有隱情什黑,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布堪夭,位于F島的核電站愕把,受9級特大地震影響拣凹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恨豁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一嚣镜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘蜜,春花似錦菊匿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至象颖,卻和暖如春佩厚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说订。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工抄瓦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶冷。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓钙姊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埃叭。 傳聞我的和親對象是個(gè)殘疾皇子摸恍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容