這裏只是介紹一些對象的基本定義、聲明方式、遍歷等基本操做,關於對象的閉包、封裝和繼承在面向對象一文中介紹html
任意值的集合,用冒號分割組成名值對(鍵值對),不一樣的鍵值對之間逗號隔開瀏覽器
鍵值對即對象的屬性,鍵爲屬性名,值爲屬性值閉包
對象中的函數叫方法(也是屬性)函數
直接經過var聲明一個對象,並在{}中寫出該對象的屬性名、屬性值、函數(方法)this
構造示例以下prototype
用var聲明構造一個Object對象的實例,而後經過點(.)的方法,給該對象添加屬性和方法3d
構造示例以下:code
定義一個函數和其形參,在函數內部用this指向當前函數,把傳入的參數添加爲屬性值,定義完成後,構建一個函數的實例htm
注意建立的若干個對象實例彼此之間沒有關聯對象
我的理解,有點相似於工廠模式,也是像把一個對象丟入一個白盒中,輸出了一個有指定屬性名和方法的對象
不過這裏聲明對象是在函數的外部,函數只負責給this傳遞屬性值並添加方法,能夠理解成發了一張說明書,可是要本身加工生產一個對象
構造示例以下:
定義一個函數,函數內部var聲明構造一個Object對象,並經過對象名.屬性名=屬性值來給這個對象添加屬性和方法,最後返回該對象
返回的對象具備相同屬性名、方法,但彼此獨立,沒有關聯
工廠模式跟構造方法不一樣在,傳入的參數是賦值給函數內部建立的obj的,最後返回obj,能夠理解成,在工廠內部完成了建立和添加的過程,出廠就可直接使用
構造示例以下:
定義一個空函數(空方法),經過函數的prototype屬性來給該空函數添加屬性、方法,最後經過var聲明建立一個該函數的實例,以生成一個對象
在添加屬性和方法的時候,能夠直接用prototype一個個添加,也能夠向prototype傳遞一個對象,對象內保持JSON格式
構造示例以下:
用構造方法建立一個函數,在其中用this指向當前函數,把傳入的參數賦值爲屬性值,再用原型模式給函數添加方法
最後構建一個函數的實例,以建立一個對象
實例以下:
老版本瀏覽器不兼容
用.方法(即訪問對象中的屬性)
1 console.log(friend.name);
或者用[],向其中傳入一個屬性名的字符串
1 console.log(friend['name']);
用delete,後接要刪除的屬性名(此時訪問該屬性名,輸出結果爲undefined,不會報錯)
1 delete friend.name; 2 console.log(friend.name);
屬性名 in 對象名(屬性名要用引號括起來)
1 console.log('name' in friend);
語法格式如for (p in 對象名)
其中p表示屬性名,訪問其中的屬性值要用對象名[p](由於此時p表示一個字符串)
若是在遍歷時使用對象名.p/對象名['p'],沒法訪問屬性值(返回undefined)
另外須要注意的是,構造函數聲明的對象須要實例化以後才能夠遍歷
能夠理解成,你沒法對着一個說明書,挨個兒說其中零部件的狀態,由於這裏你還沒給對象賦上屬性值
內存分爲棧內存、堆內存、代碼段以及數據段
對象的名稱保存在棧內存中,是個指向堆內存中某個對象的地址
堆內存中保存了該對象的屬性(名/值)以及方法名,方法名指向代碼段
代碼段即對象的方法的具體代碼