js基礎陣營:變量篇之特殊變量-對象

這一章,我們將好好去看看一個特殊的變量别渔,對象附迷。
我們先看看官方的定義:無序屬性的集合惧互,其屬性可以包含基本值,對象喇伯,或者函數(shù)喊儡。從字面意思上,我們可以理解為對象是一個沒有特定順序的的集合稻据,對象的每一個屬性和方法都有一個自己的名稱艾猜,每一個名稱都會有一個值,當然這個值捻悯,可以使對象匆赃,函數(shù)。以及其他基本類型數(shù)據(jù)秋度。
不過還是太抽象了炸庞,我個人其實更傾向于將對象理解成一個“圖紙”钱床,一個建房子的圖紙荚斯,在這個圖紙上,我們標明了房子的具體形狀查牌,哪里開窗戶等等一系列的參數(shù)事期,那么說到對象,就必然會說到實例纸颜,同樣的道理兽泣,在我的理解里,實例胁孙,就是按照“圖紙”來創(chuàng)建的一個個房子唠倦。那么對象這個圖紙,有哪些屬性和方法呢涮较?

屬性類型

對象有兩種屬性:數(shù)據(jù)屬性以及訪問器屬性

數(shù)據(jù)屬性

  1. configurable:表示對象是否可以通過delete來刪除屬性
  2. Enumerable:表示是否可以通過for in 循環(huán)返回屬性
  3. Writable:表示是否可以修改屬性
  4. Value: 表示數(shù)據(jù)的值稠鼻。

那么我們如何去修改以及設置這些值呢?好在js提供了一個方法狂票,Object.defineProperty(obj(屬性所在的對象),name(屬性的名稱),dataTypeObj(所要處理的數(shù)據(jù)類型))方法候齿,如果不指定參數(shù)的話,以上1,2,3個數(shù)據(jù)屬性都將是默認值true闺属,如果指定了參數(shù)慌盯,將會將對象的具體屬性的數(shù)據(jù)屬性類型進行特殊處理。下面我們已房子圖紙為例掂器,來看下如何處理

var house = {};
Object.defineProperty(house,'name',{
    configurable:false,
    value:'二鍋頭的房子圖紙'
});
console.log(house.name);
delete house.name;
console.log(house.name);

復制到控制臺亚皂,我們看下會顯示什么

configurable.png

可以很明顯的看出,沒有被刪除掉国瓮。
現(xiàn)在我們在看看writable,請看代碼

var house = {};
Object.defineProperty(house,'name',{
    writable:false,
    value:'二鍋頭的房子圖紙'
});
console.log(house.name);
house.name = '我要修改';
console.log(house.name);

在控制臺看下結果

image.png

最后我們來看下enumerable

var house = {};
Object.defineProperty(house,'name',{
    enumerable:false,
    value:'二鍋頭的房子圖紙'
});
for(var key in house){
   console.log(key + ':' + house[key])
}

在控制臺中沒有任何的輸出灭必,說明無法通過for in 來循環(huán)出書數(shù)據(jù)
上面我們說明了對象的4個數(shù)據(jù)類型匠楚,下面我們來看看對象的訪問器屬性

訪問器屬性

訪問器屬性是成對出現(xiàn)的,存與取

  1. getter 對象訪問任何一個屬性的時候厂财,都需要先通過調用getter函數(shù)芋簿,由其返回屬性的值。
  2. setter 對象的具體的屬性寫入值的時候璃饱,都會調用setter函數(shù)与斤,將值寫入。

同時對于訪問器屬性荚恶,js同樣提供了configurable以及enumerable屬性撩穿。如果不設置值的話,將默認為false.
同數(shù)據(jù)屬性一樣谒撼,訪問器屬性不能跟直接的定義食寡,只能通過Object.defineProperty()方法來設置。同樣以上面的例子來說明

var house = {
   name:'二鍋頭的房子',
   totalMoney:0
};
Object.defineProperty(house,'money',{
  configurable:false,
  get:function(){
    return this.totalMoney + '元';
  },
  set:function(val) {
    this.totalMoney = val;
  }
});
house.money = 200000;
console.log(house);
console.log(house.money);
delete house.money;
console.log(house.money);

將代碼拷貝到控制臺廓潜,我們來看下結果
image.png

我們明明在賦值的時候給的是20000抵皱,為啥后面會多一個元呢?這就是get的功能辩蛋。這樣當我們賦值以及讀取的時候我們都能夠實時的監(jiān)控了呻畸,這也就使得vue的誕生了,后面詳細說下vue的原理悼院。(又挖一個坑)
那么我們如何去讀取一個對象的屬性值呢伤为?

屬性特性的讀取

在js中,我們難免會需要知道一個對象的數(shù)據(jù)屬性以及訪問器屬性具體設置的值据途,所以js提供了Object.getOwnPropertyDescriptor()方法绞愚,來獲取,同樣以上面的例子來舉例颖医。

var house = {
   name:'二鍋頭的房子',
   totalMoney:0
};
Object.defineProperty(house,'money',{
  configurable:false,
  get:function(){
    return this.totalMoney + '元';
  },
  set:function(val) {
    this.totalMoney = val;
  }
});
console.log(Object.getOwnPropertyDescriptor(house,'money'));

復制代碼到控制臺位衩,我們來看下結果
image.png

至此,我們關于對象的基本知識說完了便脊,下一章蚂四,我們將一起來看看對象的創(chuàng)建

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哪痰,隨后出現(xiàn)的幾起案子遂赠,更是在濱河造成了極大的恐慌,老刑警劉巖晌杰,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跷睦,死亡現(xiàn)場離奇詭異,居然都是意外死亡肋演,警方通過查閱死者的電腦和手機抑诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門烂琴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜕乡,你說我怎么就攤上這事奸绷。” “怎么了层玲?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵号醉,是天一觀的道長。 經常有香客問我辛块,道長畔派,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任润绵,我火速辦了婚禮线椰,結果婚禮上,老公的妹妹穿的比我還像新娘尘盼。我一直安慰自己憨愉,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布悔叽。 她就那樣靜靜地躺著莱衩,像睡著了一般爵嗅。 火紅的嫁衣襯著肌膚如雪娇澎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天睹晒,我揣著相機與錄音趟庄,去河邊找鬼。 笑死伪很,一個胖子當著我的面吹牛戚啥,可吹牛的內容都是我干的。 我是一名探鬼主播锉试,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼猫十,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呆盖?” 一聲冷哼從身側響起拖云,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎应又,沒想到半個月后宙项,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡株扛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年尤筐,在試婚紗的時候發(fā)現(xiàn)自己被綠了汇荐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡盆繁,死狀恐怖掀淘,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情油昂,我是刑警寧澤繁疤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站秕狰,受9級特大地震影響稠腊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜鸣哀,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一架忌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧我衬,春花似錦叹放、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至破加,卻和暖如春俱恶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背范舀。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工合是, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锭环。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓聪全,卻偏偏與公主長得像,于是被迫代替她去往敵國和親辅辩。 傳聞我的和親對象是個殘疾皇子难礼,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容