亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

JavaScript深入淺出————對象(四)

2024-04-27 15:12:22
字體:
來源:轉載
供稿:網友

一、javascript對象概述

對象中包含一系列屬性,這些屬性時無序的.   每個屬性都有一個字符串key和對應的value.   var obj={x:1,y:2};   obj.x;//1   obj.y;//2      var obj={};   obj[1]=1;   obj["1"]=2;   obj;//object{1:2}      obj[{}]=true;   obj[{x:1}]=true;   obj;//Object{1:2,[object Object]:true}      var obj={};   obj.y=2;   obj.x=1;      function foo(){};   foo.PRototype.z=3;   var obj=new foo();

二、創建對象,原型鏈

1.對象創建-字面量 var obj1={x:1,y:2}; var obj2={  x:1,  y:2,  o:{z:3,n:4} } 2.創建對象-new/原型鏈 function foo(){}//函數對象會默認帶有prototype屬性,改、該屬性為一個對象屬性,該對象也是有原型的,指向Object.prototype,Object.prototype也是有原型的,其值為null foo.prototype.z=3;//為對象添加屬性z=3  var obj=new foo();//創建新對象obj的原型會指向構造器的原型(即foo.prototype) obj.y=2; obj.x=1;  obj.x;//1 obj.y;//2 obj.z;//3 typeof obj.toString();//"function" "z" in obj;//true obj.hasOwnProperty("z");//false //通過原型鏈的方法可以繼承原型鏈上的屬性,同時又不會修改原型鏈上的屬性  3.對象創建-Object.create() var obj=Object.create({x:1});//創建一個對象,并且對象的原型指向{x:1},{x:1}的原型指向Object.prototype,Object.prototype指向null obj.x;//1 typeof obj.toString;//"function" obj.hasOwnProperty("x");//false  并不是所有的對象都含有Object.prototype var obj=Object.create(null);//此時obj的原型直接指向null,不包含Object.prototype,也不會包含Object的toString方法 obj.toString;//undefined 

三、屬性操作

1.屬性讀寫 var obj={x:1,y:2}; obj.x;//1 obj["y"];//2  obj["x"]=3; obj.y=4;  var obj={x1:1,x2:2}; var i=1,n=2; for(;i<=n;i++){  console.log(obj["x"+i]);//1,2 }  var p; for(p in obj){  console.log(obj[p]); } //注意:用for-in遍歷時有可能會把原型鏈上的屬性也遍歷出來,并且其順序不確定 

2.屬性讀寫-異常 var obj={x:1}; obj.y;//undefined var yz=obj.y.z;//TypeError:Cannot read prototype "z" of undefined obj.y.z=2;//TypeError:Cannot set property "z" of undefined  var yz; if(obj.y){  yz=obj.y.z; }  var yz=obj && obj.y && obj.y.z;//三個條件連接起來判斷真假,都為真,則返回最后一個值; 

3.屬性刪除 var person={age:28,title:"fe"}; delete person.age;//true delete person["title"];//true person.age;//undefined delete person.age;//true,重復刪除某個屬性時,仍返回true //注意:刪除屬性時返回true并不表示刪除屬性成功,而是表示該屬性已經不存在了  delete Object.prototype;//false,每個屬性會有一系列標簽來控制它的權限  var descriptor=Object.getOwnPropertyDescriptor(Object,"prototype"); descriptor.configurable;//false,configurable表示是否可配置,其值為false決定了delete Object.prototype的值也為false并且不會生效 

4.屬性檢測 var cat=new Object; cat.legs=4; cat.name="Kitty";  "legs" in cat;//true "abc" in cat;//false "toString" in cat;//true,inherited property!!!  cat.hasOwnProperty("legs");//true cat.hasOwnProperty("toString");//false  cat.propertyIsEnumerable("legs");//true,是否可枚舉 cat.propertyIsEnumerable("toString");//false  自定義一個屬性,并讓它的枚舉標簽為false Object.defineProperty(cat,"price",{enumerable:false,value:1000});//Object.defineProperty中的enumerable默認為false cat.propertyIsEnumerable("price");//false cat.hasOwnProperty("price");//true

5.屬性枚舉 var o={x:1,y:2,z:3}; "toString" in o;//true o.propertyIsEnumerable("toString");//false var key; for(key in o){  console.log(key);//x,y,z }  var obj=Object.create(o); obj.a=4; var key; for(key in obj){  console.log(key);//a,x,y,z }  var obj=Object.create(o); obj.a=4; var key; for(key in obj){  if(obj.hasOwnProperty(key)){   console.log(key);//a  } }

四、get/set方法

例1:

var man={  name:"Bosn",  weibo:"@Bosn",  get age(){   return new Date().getFullYear()-1988;  },  set age(val){   console.log("Age can not be set to "+val);  } } console.log(man.age);//27 man.age=100;//Age can not be set to 100 console.log(man.age);//27 

例2:

var man={  weibo:"@Bosn",  $age:null,  get age(){   if(this.$age==undefined){    return new Date().getFullYear()-1988;   }else{    return this.$age;   }  },  set age(val){   val= +val;//將字符串轉為數字   if(!isNaN(val)&&val>0&&val<150){    this.$age=+val;   }else{    throw new Error("Incorrect val="+val);   }  } } console.log(man.age);//27 man.age=100; console.log(man.age);//100 man.age="abc";//error:Incorrect val=NaN

get/set與原型鏈

function foo(){} Object.defineProperty(foo.prototype,"z",{get:function(){return 1;}});  var obj =new foo();  obj.z;//1 obj.z=10; obj.z;//1 //注意:obj的對象上沒有z屬性并且向上查找時有對于的get或set方法時,當我們嘗試賦值時,實際上會走get或set方法  //通過下面的方法可以為當前對象添加屬性 Object.defineProperty(obj,"z",{value:100,configurable:true}); obj.z;//100 delete obj.z; obj.z;//1

var o={}; Object.defineProperty(o,"x",{value:1});//writable=false,configurable=false var obj=Object.create(o); obj.x;//1 obj.x=200; obj.x;//still 1,can't change it  Object.defineProperty(obj,"x",{writable:true,configurable:true,value:100}); obj.x;//100 obj.x=500; obj.x;//500

五、屬性標簽

通過Object.getOwnPropertyDescriptor("對象","屬性")來查看對象屬性的屬性標簽 例:Object.getOwnPropertyDescriptor({pro:true},"pro");//Object{value:true,writable:true,enumerable:true,configurable:true} Object.getOwnPropertyDescriptor({pro:true},"a");//undefined  管理或設置屬性標簽 Object.defineProperty("對象","屬性","屬性標簽對象") Object.defineProperties("對象","復雜對象") 例1: var person={}; Object.defineProperty(person,"name",{  configurable:false,  writable:false,  enumerable:true,  value:"Bosn Ma" }); person.name;//Bosn Ma person.name=1; person.name;//still Bosn Ma delete person.name;//false Object.defineProperty(person,"type",{  configurable:true,  writable:true,  enumerable:false,  value:"Object" }); Object.keys(person);//["name"],通過Object.keys()可以查看對象的屬性  例2: var person={}; Object.defineProperties(person,{  title:{value:"fe",enumerable:true},  corp:{value"BABA",enumerable:true},  salary:{value:50000,enumberable:true,writable:true} }); Object.getOwnPropertyDescriptor(person,"salary");//Object{value:50000,writable:true,enumerable:true,configurable:false} Object.getOwnPropertyDescriptor(person,"corp");//Object{value:"BABA",writable:false,enumerable:true,configurable:false}  例3:

 var person={}; Object.defineProperties(person,{  title:{value:"fe",enumerable:true},  corp:{value:"BABA",enumerable:true},  salary:{value:50000,enumerable:true,writable:true},  luck:{   get:function(){    return Math.random()>0.5?"good":"bad";   }  },  promote:{   set:function(level){    this.salary*=1+level*0.1;   }  } }); Object.getOwnPropertyDescriptor(person,"salary");//Object{value:50000,writable:true,enumerable:true,configurable:false} Object.getOwnPropertyDescriptor(person,"corp");//Object{value:"BABA",writable:false,enumerable:true,configurable:false} person.salary;//50000 person.promote=2; person.salary;//60000

屬性標簽可以重復被設置:

  var person={}; Object.defineProperty(person,"name",{  value:1111,  configurable:false//configurable為false時,除了writable從true改為false其他屬性修改不允許 }); console.log(person.name); console.log(Object.getOwnPropertyDescriptor(person,"name")); Object.defineProperty(person,"name",{  enumerable:true }); console.log(Object.getOwnPropertyDescriptor(person,"name"));

六、對象標簽

對象標簽主要有3個:[[proto]],[[class]],[[extensible]]

1.原型標簽[[proto]]

2.class標簽,沒有直接的方法來查看class,可以通過Object.prototype.toString來間接地查看

var toSting=Object.prototype.toString; function getType(o){return toSting.call(o).slice(8,-1);};  toSting.call(null);//"[object Null]" getType(null);//"Null" getType(undefined);//"undefined" getType(1);//"Number" getType(new Number(1));//"Number" typeof new Number(1);//"object" getType(true);//"Boolean" getType(new Boolean(true));//"Boolean"

3.extensible標簽表示對象是否可以擴展,屬性是否可以添加

var obj={x:1,y:2}; Object.isExtensible(obj);//true Object.preventExtensions(obj); Object.isExtensible(obj);//false obj.z=1; obj.z;//undefined,add new prototy failed Object.getOwnPropertyDescriptor(obj,"x");//Object{value:1,writable:true,enumerable:true,configurable:true}  Object.seal(obj); Object.getOwnPropertyDescriptor(obj,"x");//Object{value:1,writable:true,enumerable:true,configurable:false} Object.isSealed(obj);//true  Object.freeze(obj); Object.getOwnPropertyDescriptor(obj,"x");//Object{value:1,writable:false,enumerable:true,configurable:false} Object.isFrozen(obj);//true

序列化、其他對象方法

var obj={x:1,y:true,z:[1,2,3],nullVal:null}; JSON.stringify(obj);//"{"x":1,"y":true,"z":[1,2,3],"nullVal":null}"  obj={val:undefined,a:NaN,b:Infinity,c:new Date()}; JSON.stringify(obj);//"{"a":null,"b":null","c":"2015-01-20T14:12:45.910Z"}" //注意:值為undefined時不會被顯示,值為NaN和Infinity時顯示為null,值為時間會被轉為UTU的時間格式  obj=JSON.parse("{"x":1}"); obj.x;//1

序列化-自定義

var obj={  x:1,  y:2,  o:{   o1:1,   o2:2,   toJSON:function(){    return this.o1+this.o2;   }  } }; JSON.stringify(obj);//"{"x:1,"y":2,"o":3}"

其他對象方法

var obj={x:1,y:2}; obj.toString();//"[object Object]" obj.toString=function(){return this.x+this.y}; console.log("Result "+obj);//"Result 3" ,by toString  console.log(+obj);//3,form toString  obj.valueOf=function(){return this.x+this.y+100;}; console.log(+obj);//103,from valueOf  console.log("Result "+obj);//still "Result 103" 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色噜噜亚洲精品中文字幕| 亚洲日本aⅴ片在线观看香蕉| 欧美精品videossex88| 亚洲国产精品电影在线观看| 欧美激情亚洲精品| 91高清在线免费观看| 日韩av一卡二卡| 社区色欧美激情 | 国内外成人免费激情在线视频| 成人亚洲欧美一区二区三区| 久久久久久噜噜噜久久久精品| 在线观看日韩www视频免费| 国外成人免费在线播放| 最新亚洲国产精品| 高清日韩电视剧大全免费播放在线观看| 成人女保姆的销魂服务| 一区二区三区精品99久久| 国产成人精品av在线| 国产欧美精品va在线观看| 日韩欧美精品在线观看| 永久免费看mv网站入口亚洲| 91视频国产精品| 91在线观看免费高清| 色爱av美腿丝袜综合粉嫩av| 九九热这里只有精品免费看| 欧美性受xxxx黑人猛交| 日韩在线观看视频免费| 久99久在线视频| 中文字幕欧美专区| 久久视频精品在线| 国产精品爽爽ⅴa在线观看| 欧美一级淫片aaaaaaa视频| 国产精品成人播放| 亚洲成人av中文字幕| 成人精品一区二区三区电影黑人| 亚洲另类欧美自拍| 日韩欧美有码在线| 中文字幕亚洲二区| 欧美成人自拍视频| 国产精品久久久久高潮| 国内免费精品永久在线视频| 欧美午夜性色大片在线观看| 欧美亚洲一区在线| 色999日韩欧美国产| 黑人巨大精品欧美一区二区免费| 91免费国产视频| 精品成人久久av| 欧美激情视频网| 中文国产成人精品久久一| 日本一区二区在线免费播放| 亚洲欧洲xxxx| 国产精品揄拍一区二区| 亚洲人成伊人成综合网久久久| 日韩精品免费综合视频在线播放| 国产一区二区日韩精品欧美精品| 欧美孕妇孕交黑巨大网站| 欧美黑人xxx| 91香蕉国产在线观看| 久久国产精品99国产精| 亚洲风情亚aⅴ在线发布| 亚洲人精选亚洲人成在线| 久久综合久中文字幕青草| 国产精品久久色| 亚洲视频欧洲视频| 日韩欧美一区二区三区久久| 日韩免费视频在线观看| 亚洲国产天堂久久综合网| 久久av红桃一区二区小说| 5278欧美一区二区三区| 国模精品视频一区二区| 国产在线观看精品一区二区三区| 亚洲xxx大片| 91天堂在线视频| 亚洲成人激情图| 久久91亚洲精品中文字幕奶水| 欧美日韩成人精品| 国产亚洲欧美日韩美女| 亚洲欧美中文日韩在线| 欧美—级a级欧美特级ar全黄| 亚洲美女av电影| 亚洲精品永久免费精品| 性金发美女69hd大尺寸| 国产成人精品国内自产拍免费看| 中日韩美女免费视频网站在线观看| 欧美激情按摩在线| 国产99视频精品免视看7| 日韩欧美成人精品| 欧美高清电影在线看| 欧美在线视频导航| 欧美极品美女视频网站在线观看免费| 日韩在线播放视频| 日韩亚洲综合在线| 欧美成在线观看| 久久精品福利视频| 日韩中文有码在线视频| 精品欧美一区二区三区| 91成品人片a无限观看| 亚洲а∨天堂久久精品9966| 亚洲精品欧美日韩专区| 亚洲男人天堂2019| 亚洲香蕉成视频在线观看| 精品国产美女在线| 永久免费毛片在线播放不卡| 九九精品在线播放| 欧美成人精品不卡视频在线观看| 在线免费观看羞羞视频一区二区| 7m第一福利500精品视频| 国产97色在线|日韩| 国产精品老女人精品视频| 欧美日韩一区二区免费视频| 青青精品视频播放| 国产精品视频1区| 久久影视电视剧免费网站| 日韩欧美精品免费在线| 精品无码久久久久久国产| 国内精品久久久久久影视8| 91精品国产91久久久久久吃药| 亚洲理论在线a中文字幕| 日本成人在线视频网址| 精品二区三区线观看| 奇米四色中文综合久久| 91极品视频在线| 亚洲综合色av| 中文字幕亚洲欧美| 日韩精品在线视频美女| 中文字幕免费精品一区| 日韩电影大片中文字幕| 欧美性理论片在线观看片免费| 这里只有精品在线播放| 91欧美精品成人综合在线观看| 欧美日韩国产黄| 欧美日韩激情小视频| 在线视频国产日韩| 欧美日韩国产精品专区| 欧美一区二区三区四区在线| 日韩小视频在线| 亚洲跨种族黑人xxx| 91精品免费看| 中文字幕亚洲激情| 亚洲国产婷婷香蕉久久久久久| 亚洲成人教育av| 九色精品免费永久在线| 国产精品视频久久久久| 中文字幕精品在线视频| 亚洲第一区中文字幕| 国产精品久久久av| 久热精品视频在线免费观看| 亚洲欧美一区二区三区在线| 亚洲系列中文字幕| 亚洲欧美在线x视频| 成人激情视频在线播放| 狠狠做深爱婷婷久久综合一区| 久久这里有精品视频| 亚洲有声小说3d| 91国内精品久久| 国产精品普通话| 不卡中文字幕av| 精品成人av一区| 国产精品成人观看视频国产奇米| 欧美日韩亚洲天堂| 91久久久久久久久| 日韩少妇与小伙激情| 欧美高清在线观看| 日韩动漫免费观看电视剧高清|