国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript ES5之Object.create函數(shù)詳解

zhaofeihao / 489人閱讀

介紹
  

在創(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ùn)的是,ES5為我們提供了一種創(chuàng)建完全"干凈"的對(duì)象的方法,Object.create函數(shù),接下我將向大家介紹Object.create的詳細(xì)使用

語(yǔ)法
javascript   Object.create(proto, [ propertiesObject ]); 
參數(shù)介紹
  

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é)果(后面解答)

  
    

set: 函數(shù),有一個(gè)參數(shù)(后面解答)

詳細(xì)使用

光看概念其實(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

javascript       account.type = "人民銀行"; //"人民銀行"
       account.type; // "人民銀行"
configurable屬性使用
  

還是上面的例子,突然,我不想要account對(duì)象的type屬性了,自然的我們會(huì)想到

javascript       delete account.type // false
  

我去!!!刪都不讓我刪!? 別急,這次是configurable屬性的問(wèn)題,如果我們將它設(shè)置為true

javascript       account.type; // "建設(shè)銀行"
       delete account.type // true
       account.type; // undefined
enumerable屬性值
  

現(xiàn)在我要遍歷account對(duì)象

javascript       for(var i in account){
           console.log(account[i]);
       }
       // undefined
  

沒(méi)有結(jié)果!?type屬性去哪了!?我知道大家都很聰明,這次肯定是enumerable屬性值惹得禍,如果enumerable屬性設(shè)置為true

javascript       for(var i in account){
           console.log(account[i]);
       }
       // "建設(shè)銀行"
get和set的用法
  

現(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

相關(guān)文章

  • javasscript - 收藏集 - 掘金

    摘要:跨域請(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)題...

    Rango 評(píng)論0 收藏0
  • 詳解javascript的類(lèi)

    摘要:原文地址詳解的類(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ǔ)言,一...

    hufeng 評(píng)論0 收藏0
  • 詳解javascript的類(lèi)

    摘要:原文地址詳解的類(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ǔ)言,一...

    marek 評(píng)論0 收藏0
  • javascript對(duì)象詳解:__proto__和prototype的區(qū)別和聯(lián)系

    摘要:當(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ǔ)的童鞋閱讀。原文戳這...

    chavesgu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<