Javascript Object的屬性方法

Object.create(prototype[,descriptors])

  • 這個(gè)方法用于創(chuàng)建一個(gè)對(duì)象饵较,并把其prototype屬性賦值為第一個(gè)參數(shù),同時(shí)可以設(shè)置多個(gè)descriptors遭赂,關(guān)于decriptor下一個(gè)方法就會(huì)介紹這里先不說告抄。只需要這樣就可以創(chuàng)建一個(gè)原型鏈干凈對(duì)象了
var o = Object.create({
  "say": function() {
    alert(this.name);
  },
  "name": "Byron"
});
image.png

Object.defineProperty(O,Prop,descriptor) / Object.defineProperties(O,descriptors)

  • 想明白這兩個(gè)函數(shù)必須明白descriptor是什么,在之前的JavaScript中對(duì)象字段是對(duì)象屬性嵌牺,是一個(gè)鍵值對(duì)打洼,而在ECMAScript5中引入property,property有幾個(gè)特征
  1. value:值逆粹,默認(rèn)是undefined
  2. writable:是否是只讀property募疮,默認(rèn)是false,有點(diǎn)像C#中的const
  3. enumerable:是否可以被枚舉(for in),默認(rèn)false
  4. configurable:是否可以被刪除僻弹,默認(rèn)false芭毙;同樣可以像C#、Java一樣些get/set侈百,不過這兩個(gè)不能和value讽坏、writable同時(shí)使用
  5. get:返回property的值得方法织咧,默認(rèn)是undefined
  6. set:為property設(shè)置值的方法巡社,默認(rèn)是undefined
Object.defineProperty(o, 'age', {
  value: 24,
  writable: true,
  enumerable: true,
  configurable: true
});

Object.defineProperty(o, 'sex', {
  value: 'male',
  writable: false,
  enumerable: false,
  configurable: false
});

console.log(o.age); //24
o.age = 25;

for (var obj in o) {
  console.log(obj + ' : ' + o[obj]);
  /*
            age : 25  //沒有把sex : male 遍歷出來
            say : function () {
                alert(this.name);
            } 
            name : Byron 
            */
}
delete o.age;
console.log(o.age); //undefined

console.log(o.sex); //male
//o.sex = 'female'; //Cannot assign to read only property 'sex' of #<Object>
delete o.age;
console.log(o.sex); //male ,并沒有被刪除
  • 也可以使用defineProperties方法同時(shí)定義多個(gè)property朝群,
Object.defineProperties(o, {
  'age': {
    value: 24,
    writable: true,
    enumerable: true,
    configurable: true
  },
  'sex': {
    value: 'male',
    writable: false,
    enumerable: false,
    configurable: false
  }
});

Object.getOwnPropertyDescriptor(O,property)

  • 這個(gè)方法用于獲取defineProperty方法設(shè)置的property 特性
var props = Object.getOwnPropertyDescriptor(o, 'age');
console.log(props); //Object {value: 24, writable: true, enumerable: true, configurable: true}

Object.getOwnPropertyNames

  • 獲取所有的屬性名右莱,不包括prototy中的屬性,返回一個(gè)數(shù)組
console.log(Object.getOwnPropertyNames(o)); //["age", "sex"]

例子中可以看到prototype中的name屬性沒有獲取到


Object.keys()

  • 和getOwnPropertyNames方法類似晨抡,但是獲取所有的可枚舉的屬性调煎,返回一個(gè)數(shù)組
console.log(Object.keys(o)); //["age"]

上面例子可以看出不可枚舉的sex都沒有獲取的到


Object.preventExtensions(O) / Object.isExtensible

  • 方法用于鎖住對(duì)象屬性,使其不能夠拓展窖剑,也就是不能增加新的屬性,但是屬性的值仍然可以更改,也可以把屬性刪除肋乍,Object.isExtensible用于判斷對(duì)象是否可以被拓展
console.log(Object.isExtensible(o)); //true
o.lastName = 'Sun';
console.log(o.lastName); //Sun ,此時(shí)對(duì)象可以拓展

Object.preventExtensions(o);
console.log(Object.isExtensible(o)); //false

o.lastName = "ByronSun";
console.log(o.lastName); //ByronSun,屬性值仍然可以修改

//delete o.lastName;
console.log(o.lastName); //undefined仍可刪除屬性

o.firstname = 'Byron'; //Can't add property firstname, object is not extensible 不能夠添加屬性

Object.seal(O) / Object.isSealed

  • 方法用于把對(duì)象密封,也就是讓對(duì)象既不可以拓展也不可以刪除屬性(把每個(gè)屬性的configurable設(shè)為false),單數(shù)屬性值仍然可以修改蛉拙,Object.isSealed由于判斷對(duì)象是否被密封
Object.seal(o);
o.age = 25; //仍然可以修改
delete o.age; //Cannot delete property 'age' of #<Object>

Object.freeze(O) / Object.isFrozen

  • 完全凍結(jié)對(duì)象硫惕,在seal的基礎(chǔ)上,屬性值也不可以修改(每個(gè)屬性的wirtable也被設(shè)為false)
Object.freeze(o);
o.age = 25; //Cannot assign to read only property 'age' of #<Object>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徽级,一起剝皮案震驚了整個(gè)濱河市现使,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖贸人,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異父晶,居然都是意外死亡铛只,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門承匣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隶症,你說我怎么就攤上這事狈定。” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵探孝,是天一觀的道長粱腻。 經(jīng)常有香客問我柬批,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任蜀细,我火速辦了婚禮归斤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己疏哗,他們只是感情好徘公,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呵俏,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音涝影,去河邊找鬼燃逻。 笑死姆怪,一個(gè)胖子當(dāng)著我的面吹牛稽揭,可吹牛的內(nèi)容都是我干的溪掀。 我是一名探鬼主播唠叛,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伙单,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤念秧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后扫沼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體出爹,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年缎除,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了严就。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡器罐,死狀恐怖梢为,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤铸董,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布祟印,位于F島的核電站,受9級(jí)特大地震影響粟害,放射性物質(zhì)發(fā)生泄漏蕴忆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一悲幅、第九天 我趴在偏房一處隱蔽的房頂上張望套鹅。 院中可真熱鬧,春花似錦汰具、人聲如沸卓鹿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吟孙。三九已至,卻和暖如春聚蝶,著一層夾襖步出監(jiān)牢的瞬間杰妓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工既荚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稚失,地道東北人栋艳。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓恰聘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吸占。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晴叨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)矾屯,斷路器兼蕊,智...
    卡卡羅2017閱讀 134,704評(píng)論 18 139
  • 序 從最近的js入門系列的閱讀量逐步遞減,觀眾老爺?shù)呐d趣也不再能夠接受一些細(xì)節(jié)性的地方深度挖掘件蚕,讓我有了一些思考孙技。...
    zhaolion閱讀 1,585評(píng)論 5 19
  • 今天第一次出差來到有著“東方圣城”之稱的孔子故里-曲阜,入住的酒店也是非常有儒家特色的排作。一步入酒店牵啦,就感受到濃濃的...
    米特Dragon閱讀 102評(píng)論 2 0
  • 花盆碎了,碎的毫無半點(diǎn)預(yù)兆妄痪,碎的猝不及防哈雏,碎的不明不白,是鄰居淘氣的小孩用木棍敲碎的?是思春的野貓?jiān)陉柵_(tái)走廊...
    瓶水之冰閱讀 221評(píng)論 1 2
  • JavaScript事件基礎(chǔ)和事件綁定 事件驅(qū)動(dòng) 1.事件JavaScript偵測到的用戶的操作或是頁面的一些行為...
    ningluo閱讀 1,325評(píng)論 0 0