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