成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

zhaofeihao / 505人閱讀

介紹
  

在創(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ì)使用

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

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

  
    

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

詳細(xì)使用

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

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

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

javascript       delete account.type // false
  

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

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

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

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

沒有結(jié)果?。縯ype屬性去哪了?。课抑来蠹叶己苈斆?,這次肯定是enumerable屬性值惹得禍,如果enumerable屬性設(shè)置為true

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

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

相關(guān)文章

  • javasscript - 收藏集 - 掘金

    摘要:跨域請求詳解從繁至簡前端掘金什么是為什么要用是的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題。異步編程入門道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 jsonp 跨域請求詳解——從繁至簡 - 前端 - 掘金什么是jsonp?為什么要用jsonp?JSONP(JSON with Padding)是JSON的一種使用模式,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題...

    Rango 評論0 收藏0
  • 詳解javascript的類

    摘要:原文地址詳解的類博主博客地址的個(gè)人博客從當(dāng)初的一個(gè)彈窗語言,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。那么,的類又該怎么定義呢在面向?qū)ο缶幊讨校愂菍ο蟮哪0?,定義了同一組對象又稱實(shí)例共有的屬性和方法。這個(gè)等同于的屬性現(xiàn)已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類 博主博客地址:Damonare的個(gè)人博客 ??Javascript從當(dāng)初的一個(gè)彈窗語言,一...

    hufeng 評論0 收藏0
  • 詳解javascript的類

    摘要:原文地址詳解的類博主博客地址的個(gè)人博客從當(dāng)初的一個(gè)彈窗語言,一步步發(fā)展成為現(xiàn)在前后端通吃的龐然大物。那么,的類又該怎么定義呢在面向?qū)ο缶幊讨校愂菍ο蟮哪0?,定義了同一組對象又稱實(shí)例共有的屬性和方法。這個(gè)等同于的屬性現(xiàn)已棄用。。 前言 生活有度,人生添壽。 原文地址:詳解javascript的類 博主博客地址:Damonare的個(gè)人博客 ??Javascript從當(dāng)初的一個(gè)彈窗語言,一...

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

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

    chavesgu 評論0 收藏0

發(fā)表評論

0條評論

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