JS對象

真是頭都看禿了才能把作業(yè)做完。JS對象這一部分的初步學(xué)習(xí)遇到了一些難點。其主要的問題集中在this是什么。這里對該部分寫一個簡單的記錄,理一理思路吧。

本文參考了很多別人的文章,不喜歡當(dāng)搬運工,基礎(chǔ)知識已經(jīng)有很多非常棒的博客了。

REF:

  1. https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/Basics
  2. http://www.codexiu.cn/javascript/blog/40328/
  3. https://juejin.im/post/59bfe84351882531b730bac2

對象基礎(chǔ)

對象是一個包含相關(guān)數(shù)據(jù)和方法的集合(通常由一些變量和函數(shù)組成,我們稱之為對象里面的屬性和方法)

一個對象由許多的成員組成,每一個成員都擁有一個名字和一個值。每一個名字/值(name/value)對被逗號分隔開,并且名字和值之間由冒號(:)分隔

var objectName = {
  member1Name : member1Value,
  member2Name : member2Value,
  member3Name : member3Value
}

創(chuàng)建對象的兩種方法

  1. 對象字面量 使用key/value的形式直接創(chuàng)建對象 var obj = {key: value};

這種方式直接通過花括號將對象的屬性包起來,使用key/value的方式創(chuàng)建對象屬性,每個屬性之間用逗號隔開。

注意:如果是最后一個屬性,后面就不要加逗號,因為在一些舊的瀏覽器下會報錯。

  1. 構(gòu)造函數(shù)(new關(guān)鍵字)

var o = new Object(); // 創(chuàng)建一個空對象,效果等同{}.

var d = new Date(); // 創(chuàng)建一個表示當(dāng)前時間的對象

var r = new RegExp("js"); // 創(chuàng)建一個正則表達式對象

點表示法(dot notation)

對象的名字表現(xiàn)為一個命名空間(namespace),當(dāng)你想訪問對象內(nèi)部的屬性或方法時,它必須寫在第一位,然后是一個點(.),緊接著是你想要訪問的項目,標(biāo)識可以是簡單屬性的名字(name),或者是數(shù)組屬性的一個子元素,又或者是對象的方法調(diào)用。

當(dāng)一個對象成員的值為另一個對象的時候,子對象的命名空間則為子命名空間。鏈?zhǔn)降狞c表示法可以達到訪問子命名空間的效果。

括號表示法(bracket notation)

對象有時被稱之為關(guān)聯(lián)數(shù)組(associative array)——對象做了字符串到值的映射,而數(shù)組做的是數(shù)字到值的映射。

括號表示法一個有用的地方是它不僅可以動態(tài)的去設(shè)置對象成員的值,還可以動態(tài)的去設(shè)置成員的名字。

obj[variableName] = value;

重點:this

  • 像我一樣的Newbie對this的理解很艱辛,我引用最后我理解的博文的兩句話來總結(jié)一下:

    this永遠指向最后調(diào)用它的那個對象,或者說點前面那個對象。

比如a.func()那么functhis就是a; a.b.c.d.f.e.func()this就是e;

匿名函數(shù)的this永遠指向window,或者說你找不到誰點了這個函數(shù),那么this代表的對象就是全局window

  • 嚴格模式?jīng)]有window

前面沒有調(diào)用的對象那么就是全局對象 window,這就相當(dāng)于是 window.a();注意,這里我們沒有使用嚴格模式,如果使用嚴格模式的話,全局對象就是 undefined,那么就會報錯 Uncaught TypeError: Cannot read property 'name' of undefined

  • 不會向上尋找

就算 a 中沒有 name 這個屬性,也不會繼續(xù)向上一個對象尋找 this.name,而是直接輸出 undefined

  • 還有一個需要注意的就是,原始的對象以字典結(jié)構(gòu)保存,每一個屬性名都對應(yīng)一個屬性描述對象。例如 {foo: 5}
{
  foo: {
    [[value]]: 5
    [[writable]]: true
    [[enumerable]]: true
    [[configurable]]: true
  }
}

如果對象成員值為函數(shù),例如{foo: func(){}}那么其原始的對象其實是鏈接的函數(shù)地址。

{
  foo: {
    [[value]]: 函數(shù)地址
    ...
  }
}

所以如果有將這個成員函數(shù)賦值給外部參數(shù),其實相當(dāng)與脫離了其對象的上下文環(huán)境直接從變量名指向了函數(shù)地址。

其他的別的博客寫得很棒了,直接去看鏈接吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,150評論 2 9
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,876評論 0 3
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,320評論 1 10
  • 對象的概述 什么是對象? 對象是一個具體的事物,包含一系列的屬性,這些屬性是無序的,每一屬性都有一個字符串key和...
    李華炎閱讀 360評論 0 1
  • 一,電子書的價值 你一定對電子書并不陌生,你一定是在淘寶等平臺上買的。與網(wǎng)上銷售的任何其他產(chǎn)品相比,電子書的利潤率...
    放馬子過來吧閱讀 2,300評論 0 1

友情鏈接更多精彩內(nèi)容