介紹
在創(chuàng)建對(duì)象的時(shí)候,我們有2種常用方法
一個(gè)是文本標(biāo)記法(var obj = {}),一種是運(yùn)用Object函數(shù)進(jìn)行對(duì)象的創(chuàng)建(new Object()).
但是這兩種方式并不是創(chuàng)建的一個(gè)完完全全"干干凈凈"的對(duì)象,這里的干凈只得是沒(méi)有繼承鏈.
語(yǔ)法幸運(yùn)的是,ES5為我們提供了一種創(chuàng)建完全"干凈"的對(duì)象的方法,Object.create函數(shù),接下我將向大家介紹Object.create的詳細(xì)使用
參數(shù)介紹javascript Object.create(proto, [ propertiesObject ]);
proto
一個(gè)對(duì)象,作為新創(chuàng)建對(duì)象的原型。如果 proto 參數(shù)不是 null 或一個(gè)對(duì)象值,則拋出一個(gè) TypeError 異常。null表示沒(méi)有原型對(duì)象(這樣就創(chuàng)建了一個(gè)"干凈的對(duì)象")
propertiesObject
一個(gè)對(duì)象值,可以包含若干個(gè)屬性,屬性名為新建對(duì)象的屬性名,屬性值為那個(gè)屬性的屬性描述符對(duì)象.(屬性將做簡(jiǎn)單介紹,后面將詳細(xì)解答)
value: 設(shè)置屬性的值
writable: 布爾值,設(shè)置屬性是否可以被重寫(xiě),默認(rèn)屬性值為false(不能被重寫(xiě))
enumerable: 布爾值,設(shè)置屬性是否可以被枚舉,默認(rèn)屬性值為false(不能被枚舉)
configurable: 布爾值,設(shè)置屬性是否可以被刪除,默認(rèn)屬性值為false(不能被刪除)
get: 函數(shù),設(shè)置屬性返回結(jié)果(后面解答)
詳細(xì)使用set: 函數(shù),有一個(gè)參數(shù)(后面解答)
光看概念其實(shí)開(kāi)始我也很暈 (@﹏@)~,都是實(shí)踐出真章,OK! ~現(xiàn)在開(kāi)始~
簡(jiǎn)單對(duì)象創(chuàng)建繼續(xù)上面的創(chuàng)建"干凈"的對(duì)象,我們可以這么做:
javascript var clearObj = Object.create(null); //Object with no prototype
現(xiàn)在我想創(chuàng)建一個(gè)銀行賬戶(hù)對(duì)象,占時(shí)關(guān)注它是哪個(gè)銀行的
javascript var account = Object.create(Object.prototype,{ type: { value: "建設(shè)銀行" //enumerable: false //configurable: false //writable: false } }); account.type; // "建設(shè)銀行"writable屬性使用
繼續(xù)上面的例子,有好奇的同學(xué)可能已經(jīng)發(fā)現(xiàn)了,上面的例子中,我們做一下操作:
javascript account.type = "人民銀行"; //"人民銀行" account.type; // "建設(shè)銀行"
MD,真是日了狗了,這是怎么回事?別急,這就是writable屬性惹得貨,如果我們將屬性設(shè)置為true
configurable屬性使用javascript account.type = "人民銀行"; //"人民銀行" account.type; // "人民銀行"
還是上面的例子,突然,我不想要account對(duì)象的type屬性了,自然的我們會(huì)想到
javascript delete account.type // false
我去!!!刪都不讓我刪!? 別急,這次是configurable屬性的問(wèn)題,如果我們將它設(shè)置為true
enumerable屬性值javascript account.type; // "建設(shè)銀行" delete account.type // true account.type; // undefined
現(xiàn)在我要遍歷account對(duì)象
javascript for(var i in account){ console.log(account[i]); } // undefined
沒(méi)有結(jié)果!?type屬性去哪了!?我知道大家都很聰明,這次肯定是enumerable屬性值惹得禍,如果enumerable屬性設(shè)置為true
get和set的用法javascript for(var i in account){ console.log(account[i]); } // "建設(shè)銀行"
現(xiàn)在我需要我的account對(duì)象有另外一個(gè)屬性:賬戶(hù)號(hào)碼,我需要如果修改了給出特定格式,沒(méi)有賬戶(hù)需要給出警告
注意javascript var account = Object.create(Object.prototype,{ ? type: { value: "建設(shè)銀行", enumerable: true, configurable: false, // 不能被刪除 writable: false // 不能被修改 }, number: { get: function(){ if((typeof number) === "undefined"){ //說(shuō)明沒(méi)有設(shè)置number return "您還沒(méi)有開(kāi)通賬戶(hù)!請(qǐng)聯(lián)系前臺(tái)!"; } return "您的賬戶(hù)號(hào)碼是:"+number; }, set: function(num){ number = num; if(this.cTime === 0){ console.log("賬戶(hù)開(kāi)通成功!"); this.cTime++; }else{ console.log("賬戶(hù)號(hào)碼已經(jīng)被修改!"); } } }, cTime: { value: 0, writable: true } }); account.type; // "建設(shè)銀行" account.number; // "您還沒(méi)有開(kāi)通賬戶(hù)!請(qǐng)聯(lián)系前臺(tái)!" account.number = "610XXXXXXXXXX21"; // "賬戶(hù)開(kāi)通成功!" account.number; // "您的賬戶(hù)號(hào)碼是:610XXXXXXXXXX21" account.number = "610XXXXXXXXXX88"; // "賬戶(hù)號(hào)碼已經(jīng)被修改!" account.number; // "您的賬戶(hù)號(hào)碼是:610XXXXXXXXXX88"
以上代碼均在Chrome瀏覽器console環(huán)境下測(cè)試
在使用set,get函數(shù)的時(shí)候,不能和value屬性和writable屬性一起用,會(huì)報(bào)錯(cuò)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/85801.html
摘要:跨域請(qǐng)求詳解從繁至簡(jiǎn)前端掘金什么是為什么要用是的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪(fǎng)問(wèn)的問(wèn)題。異步編程入門(mén)道典型的面試題前端掘金在界中,開(kāi)發(fā)人員的需求量一直居高不下。 jsonp 跨域請(qǐng)求詳解——從繁至簡(jiǎn) - 前端 - 掘金什么是jsonp?為什么要用jsonp?JSONP(JSON with Padding)是JSON的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪(fǎng)問(wèn)的問(wèn)題...
摘要:原文地址詳解的類(lèi)博主博客地址的個(gè)人博客從當(dāng)初的一個(gè)彈窗語(yǔ)言,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。那么,的類(lèi)又該怎么定義呢在面向?qū)ο缶幊讨校?lèi)是對(duì)象的模板,定義了同一組對(duì)象又稱(chēng)實(shí)例共有的屬性和方法。這個(gè)等同于的屬性現(xiàn)已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類(lèi) 博主博客地址:Damonare的個(gè)人博客 ??Javascript從當(dāng)初的一個(gè)彈窗語(yǔ)言,一...
摘要:原文地址詳解的類(lèi)博主博客地址的個(gè)人博客從當(dāng)初的一個(gè)彈窗語(yǔ)言,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。那么,的類(lèi)又該怎么定義呢在面向?qū)ο缶幊讨校?lèi)是對(duì)象的模板,定義了同一組對(duì)象又稱(chēng)實(shí)例共有的屬性和方法。這個(gè)等同于的屬性現(xiàn)已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類(lèi) 博主博客地址:Damonare的個(gè)人博客 ??Javascript從當(dāng)初的一個(gè)彈窗語(yǔ)言,一...
摘要:當(dāng)這步完成,這個(gè)對(duì)象就與構(gòu)造函數(shù)再無(wú)聯(lián)系,這個(gè)時(shí)候即使構(gòu)造函數(shù)再加任何成員,都不再影響已經(jīng)實(shí)例化的對(duì)象了。此時(shí),對(duì)象具有了和屬性,同時(shí)具有了構(gòu)造函數(shù)的原型對(duì)象的所有成員,當(dāng)然,此時(shí)該原型對(duì)象是沒(méi)有成員的。 前言 本篇文章用來(lái)記錄下最近研究對(duì)象的一些心得,做一個(gè)記錄與總結(jié),以加深自己的印象,同時(shí),希望也能給正在學(xué)習(xí)中的你一點(diǎn)啟發(fā)。本文適合有一定JavaScript基礎(chǔ)的童鞋閱讀。原文戳這...
閱讀 2274·2023-04-25 14:50
閱讀 1284·2021-10-13 09:50
閱讀 1874·2019-08-30 15:56
閱讀 1854·2019-08-29 15:29
閱讀 2895·2019-08-29 15:27
閱讀 3578·2019-08-29 15:14
閱讀 1207·2019-08-29 13:01
閱讀 3309·2019-08-26 14:06