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