Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 制服丝袜怡红院,在线免费观看中文字幕,999热成人精品国产免

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JS創(chuàng)建對(duì)象的4種方式

          創(chuàng)建對(duì)象的4種方式

          方式一:通過對(duì)象字面量表示法(又稱為直接量、原始方式)object

          var obj = {name:"zyx456"};
          

          對(duì)象字面量是一個(gè)名/值對(duì)列表,每個(gè)名/值對(duì)之間用逗號(hào)分隔,名和值之間用冒號(hào)分隔,最后整體用一個(gè)花括號(hào)括起來。

          屬性名可以使用數(shù)值,比如5。數(shù)值屬性名會(huì)自動(dòng)轉(zhuǎn)換為字符串。

          var person = {"name" : "Nicholas","age" : 29,5 : true};
          

          屬性名一般不加引號(hào),以下情況必須加引號(hào):

          在ES5(以及ES3的一些實(shí)現(xiàn))中,保留字可以用做不帶引號(hào)的屬性名。然而對(duì)于ES3來說,使用保留字作為屬性名必須使用引號(hào)引起來。

          例子

          var person = {
           name : "Nicholas",
           age : 29};
          

          在ES5中,對(duì)象直接量中的最后一個(gè)屬性后的逗號(hào)可以省略,且在ES3的大部分實(shí)現(xiàn)中也可以忽略這個(gè)逗號(hào),但在IE中則報(bào)錯(cuò)。

          使用對(duì)象字面量語法時(shí),如果留空其花括號(hào),則可以定義只包含默認(rèn)屬性和方法的空對(duì)象。

          var obj = {};
          

          對(duì)象字面量也可以先創(chuàng)建,再添加屬性和方法。

          var person = {}; //與new Object()相同
          person.name = "Nicholas";
          person.age = 29;
          

          在通過對(duì)象字面量定義對(duì)象時(shí),實(shí)際上不會(huì)調(diào)用Object構(gòu)造函數(shù)

          對(duì)象可以嵌套對(duì)象:

          例如:

          var myHome={
           population : "10,000" ,
           area : "10,000" ,
           adress : { // 屬性
           country : "China" ,
           province : "shanxi" ,
           city : "xian"
           },
           say : function(){ // 方法
           return "My hometown is very beautiful ! ";
           }
           }
          

          //構(gòu)造嵌套的對(duì)象
          var SchoolData = {
           code: "0123-456-789",
           Tel: "0551-1234567",
           Fax: "0551-7654321"
          };
          //構(gòu)造被嵌入的對(duì)象
          var ZGKJDX = {
           name: "中國科技大學(xué)",
           address: "安徽·合肥",
           grade: "高等學(xué)府",
           number: "13400",
           //嵌套對(duì)象SchoolData
           data: SchoolData,
          };
          

          有一個(gè)缺點(diǎn):如果我們想在其他地方創(chuàng)建一個(gè)同樣的對(duì)象,就得把這個(gè)對(duì)象的所有代碼都復(fù)制粘貼過去。我們需要一種能夠批量創(chuàng)建同樣對(duì)象的方法,而不是只創(chuàng)建一個(gè)對(duì)象。

          我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個(gè)月整理了一份最適合2019年學(xué)習(xí)的web前端學(xué)習(xí)干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關(guān)注我的頭條號(hào)并在后臺(tái)私信我:前端,即可免費(fèi)獲取。

          有一個(gè)問題:即無法保證屬性的順序。

          添加屬性的順序可能并不是遍歷輸出屬性時(shí)的順序。

          例如

          var o = {}
          o.a = 1
          o.b = 2
          o.c = 3
          for(key in o) console.log(key); // expected a,b,c - but not guaranteed to be in that order
          

          Object 對(duì)象也缺乏forEach的方法,不能對(duì)object使用通常的迭代方法。

          js中有哪幾種數(shù)據(jù)類型_數(shù)據(jù)類型種類_數(shù)據(jù)類型中的類型的含義

          o.forEach // undefined
          

          方式二:通過new和構(gòu)造函數(shù)Object()、String()等。

          var obj = new Object();
          

          這里的函數(shù)稱做構(gòu)造函數(shù)()。

          如下所示:

          var person = new Object();
          person.name = "Nicholas";
          person.age = 29
          

          如果構(gòu)造函數(shù)無參數(shù),括號(hào)則不是必需的。

          因此可以采用下面的形式重寫上面的兩行代碼:

          var oObject = new Object;
          var oStringObject = new String;
          

          var str = new String();
          console.log(str); // 輸出的是 String{length:0,[[PrimitiveValue]]:""}
          console.log(typeof str);//object;
          

          JS原始類型都包含內(nèi)置構(gòu)造函數(shù)。例如:

          var o = new Object(); // 創(chuàng)建一個(gè)空對(duì)象,和{}一樣
          var a = new Array(); // 創(chuàng)建一個(gè)空數(shù)組,和[]一樣
          var d = new Date(); // 創(chuàng)建一個(gè)表示當(dāng)前時(shí)間的Date對(duì)象
          var r = new RegExp("js"); //創(chuàng)建一個(gè)可以進(jìn)行模式匹配的EegExp對(duì)象
          

          在JS中,通過 new 運(yùn)算符來作用與一個(gè)函數(shù),實(shí)質(zhì)上會(huì)發(fā)生這樣的過程:

          首先,創(chuàng)建一個(gè)空對(duì)象,然后用函數(shù)的apply方法,將這個(gè)空對(duì)象傳入作為 apply 的第一個(gè)參數(shù),作為上下文參數(shù)。也就是this的指向。

          var triangle = new Shape("triangle");
           //上一句相當(dāng)于下面的代碼
          var triangle = {};
          Shape.apply(triangle, ["triangle"]);
          

          方式三:用自定義構(gòu)造函數(shù)來初始化新對(duì)象。

          function A(o){
          this.name = "moyu"
          }
          let obj = new a();
          

          例子:

          function person(firstname,lastname,age,eyecolor){
           this.firstname=firstname;
           this.lastname=lastname;
           this.age=age;
           this.eyecolor=eyecolor;
          }
          var myFather=new person("Bill","Gates",56,"blue");
          var myMother=new person("Steve","Jobs",48,"green");
          

          在自定義構(gòu)造函數(shù)的內(nèi)部定義對(duì)象的方法:

          function person(firstname,lastname,age,eyecolor)
          {
           this.firstname=firstname;
           this.lastname=lastname;
           this.age=age;
           this.eyecolor=eyecolor;
           this.changeName=changeName;
           function changeName(name)
          {
           this.lastname=name;
           }
          }
          

          () 函數(shù) name 的值賦給 person 的 屬性。

          myMother.changeName("Ballmer");
          

          方式四:通過Object.create()

          Object.create()是一個(gè)靜態(tài)函數(shù),而不是提供給某個(gè)對(duì)象實(shí)例調(diào)用的方法。

          數(shù)據(jù)類型種類_數(shù)據(jù)類型中的類型的含義_js中有哪幾種數(shù)據(jù)類型

          var o1 = Object.create({x:1, y:2}); // o1繼承了屬性x和y
          

          可以通過任意原型創(chuàng)建新對(duì)象(換句話說,可以繼承任意對(duì)象)。

          第一個(gè)參數(shù)是這個(gè)新對(duì)象的原型。

          第二個(gè)參數(shù)屬性描述符對(duì)象,用于對(duì)對(duì)象的屬性進(jìn)行進(jìn)一步描述。可選。

          屬性描述符對(duì)象中的屬性,默認(rèn)不可枚舉,是繼承的屬性。

          如果指定為 ,那么是空對(duì)象{}。

          如果是null或非原始包裝對(duì)象,則拋出一個(gè) 異常。

          o = Object.create(Object.prototype, {
           // foo會(huì)成為所創(chuàng)建對(duì)象的數(shù)據(jù)屬性
           foo: {
           writable:true,
           configurable:true,
           value: "hello"
           },
           // bar會(huì)成為所創(chuàng)建對(duì)象的訪問器屬性
           bar: {
           configurable: false,
           get: function() { return 10 },
           set: function(value) {
           console.log("Setting `o.bar` to", value);
           }
           }
          });
          

          返回一個(gè)新對(duì)象,帶著指定的原型對(duì)象和屬性。

          例子:

          var obj = Object.create({}, {p: {value: 42}});
          Object.values(obj); // => []
          

          上面代碼中,Object.create()方法的第二個(gè)參數(shù)添加的對(duì)象屬性(屬性p),如果不顯式聲明,默認(rèn)是不可遍歷的,因?yàn)閜是繼承的屬性,而不是對(duì)象自身的屬性。

          可以通過傳入?yún)?shù)null來創(chuàng)建一個(gè)沒有原型的新對(duì)象,但通過這種方式創(chuàng)建的對(duì)象不會(huì)繼承任何東西,甚至不包括基礎(chǔ)方法,比如(),也就是說,它將不能和“+”運(yùn)算符一起正常工作:

          var o2 = Object.create(null); //o2不繼承任何屬性和方法
          

          如果想創(chuàng)建一個(gè)普通的空對(duì)象(比如通過{}或new Object()創(chuàng)建的對(duì)象),需要傳入Object.:

          var o3 = Object.create(Object.prototype); //o3和{}和new Object()一樣
          

          例子:通過原型繼承創(chuàng)建一個(gè)新對(duì)象。

          inherit() 返回了一個(gè)繼承自原型對(duì)象p的新對(duì)象。

          這里使用ES5中的Object.create()函數(shù)(如果存在的話)。

          如果不存在Object.create(),則退化使用其他方法。

          function inherit(p) {
           if (p == null) throw TypeError(); // p是一個(gè)對(duì)象,但不能是null
           if (Object.create) return Object.create(p); // 如果Object.create()存在,直接使用它
           var t = typeof p; // 否則進(jìn)行進(jìn)一步檢測(cè)
           if (t !== "object" && t !== "function") throw TypeError();
           function f() {}; // 定義一個(gè)空構(gòu)造函數(shù)
           f.prototype = p; //將其原型屬性設(shè)置為p
           return new f(); //使用f()創(chuàng)建p的繼承對(duì)象
          }
          var o = {}; 
          o.x = 1; 
          var p = inherit(o); // p繼承o和Object.prototype
          p.y = 2; 
          var q = inherit(p); 
          q.z = 3; 
          var s = q.toString(); 
          q.x + q.y // => 3: x和y分別繼承自o和p
          

          注意,inherit()并不能完全代替Object.create(),它不能通過傳入null原型來創(chuàng)建對(duì)象,而且不能接收可選的第二個(gè)參數(shù)。

          inherit()函數(shù)的其中一個(gè)用途就是防止庫函數(shù)無意間(非惡意地)修改那些不受你控制的對(duì)象。

          不是將對(duì)象直接作為參數(shù)傳入函數(shù),而是將它的繼承對(duì)象傳入函數(shù)。

          當(dāng)函數(shù)讀取繼承對(duì)象的屬性時(shí),實(shí)際上讀取的是繼承來的值。

          如果給繼承對(duì)象的屬性賦值,則這些屬性只會(huì)影響這個(gè)繼承對(duì)象自身,而不是原始對(duì)象:

          var o = { x: "don't change this value" };
          library_function(inherit(o)); // 防止對(duì)o的意外修改
          


          主站蜘蛛池模板: 韩国女主播一区二区| 国产成人一区二区三区| 性色AV一区二区三区无码| 中文字幕精品亚洲无线码一区| 97se色综合一区二区二区| 精品久久久久久无码中文字幕一区| 久草新视频一区二区三区| 一区二区三区视频在线播放| 无码中文字幕人妻在线一区二区三区| 国产成人久久精品麻豆一区| 日本一区二区三区日本免费 | 男人的天堂亚洲一区二区三区 | 在线一区二区观看| 精品三级AV无码一区| 日韩一区二区久久久久久| 亚洲日韩精品无码一区二区三区 | 久久99热狠狠色精品一区| 免费一区二区无码视频在线播放| 日韩毛片一区视频免费| 日韩在线视频一区二区三区| 日韩精品一区二区三区在线观看l| 国产伦精品一区二区三区不卡 | 无码人妻久久一区二区三区免费丨 | 色一情一乱一伦一区二区三区| 日韩久久精品一区二区三区| 色一情一乱一区二区三区啪啪高| 精品国产一区二区三区久| 亚洲变态另类一区二区三区| 国产一区二区成人| 欧美日韩综合一区二区三区| 国产精品无码一区二区三区毛片| jazzjazz国产精品一区二区| 亚洲一区二区三区在线播放| 91国在线啪精品一区| 亚洲AV综合色一区二区三区| 亚洲爽爽一区二区三区| 中文字幕AV一区中文字幕天堂| 日韩一区二区三区四区不卡| 亚洲一区AV无码少妇电影| 日本韩国一区二区三区| 一区二区三区四区在线播放|