日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JavaScript中幾乎一切都是對象:創(chuàng)建對象的三種方式

本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、靜海網(wǎng)站維護(hù)、網(wǎng)站推廣。

Javascript中的一切幾乎都是對象,無論是數(shù)組還是函數(shù)。本文將教你使用JavaScript創(chuàng)建對象的三種方法。

對象字面量

JavaScript對象字面量是指用大括號括起來的用逗號分隔的名稱——值對列表。對象字面量用于封裝代碼并將其包裝在有序的包中。

 
 
 
 
  1. let Person = { 
  2.   name: "Foziya", 
  3.   age: 20, 
  4.   action: ["walk", " run"], 
  5.   greeting: function() { 
  6.     console.log("Hello"); 
  7.   } 
  8. }; 

對象字面量的屬性值可以是任何數(shù)據(jù)類型,包括數(shù)組字面量、函數(shù)字面量和嵌套對象字面量。

 
 
 
 
  1. let shape = { 
  2.   name: "rectangle", 
  3.   color: "red", 
  4.   size: { 
  5.     length: 10, 
  6.     breadth: 20 
  7.   } 
  8. }; 
  9.   
  10. console.log(shape); 
  11.  // { name:'rectangle', 
  12.  // color: 'red', 
  13.  // size: { length:10, breadth: 20 } } 
  14.   
  15. console.log(shape.size.length) 
  16. // 10 

簡寫屬性名稱

假設(shè)必須將不同的變量放在一個(gè)對象內(nèi),有一種方法是:

 
 
 
 
  1. let one = 1; 
  2. let two = 2; 
  3. let three = 3; 
  4.   
  5. let numbers = { 
  6.   one: one, 
  7.   two: two, 
  8.   three: three 
  9. }; 
  10. console.log(numbers); 
  11.   
  12. //{ one: 1, two: 2, three: 3 } 

使用ECMAScript 2015,可通過較短的表示法實(shí)現(xiàn)相同的目的:

 
 
 
 
  1. let one = 1; 
  2. let two = 2; 
  3. let three = 3; 
  4.   
  5. let numbers = { one, two, three }; 
  6.   
  7. console.log(numbers); 
  8. //{ one: 1, two: 2, three: 3 } 
  9.   
  10. console.log(numbers.one) 
  11. // 1 
  12.   
  13. console.log(numbers.one === { one }.one); 
  14. // true 

用戶定義的構(gòu)造函數(shù)

你也可以使用函數(shù)在JavaScript中創(chuàng)建對象。仔細(xì)想,其實(shí)它們本身已經(jīng)是對象了,因此對象用于創(chuàng)建更多對象。

通常,此方法優(yōu)于對象構(gòu)造函數(shù)。試想必須創(chuàng)建數(shù)百個(gè)具有相同屬性的對象,使用對象構(gòu)造函數(shù)方法,必須手動將所有屬性添加到所有對象,但是使用構(gòu)造函數(shù)可以預(yù)定義這些屬性。

 
 
 
 
  1. functionmovies(name, releaseYear, genre, ratings) { 
  2.   this.name = name; 
  3.   this.releaseYear =releaseYear; 
  4.   this.genre = genre; 
  5.   this.ratings =ratings; 
  6.   this.watch = () => { 
  7.     console.log("WatchOnline"); 
  8.   }; 
  9.   
  10. let DPS = new movies("Dead Poets Society", 1989, ["Drama", "Teen"], { 
  11.   IMDb: "8.1 /10", 
  12.   Metacritic: "79%" 
  13. }); 
  14.   
  15. console.log(DPS);movies { 
  16. //     name: 'Dead Poets Society', 
  17. //         releaseYear: 1989, 
  18. //             genre: ['Drama','Teen'], 
  19. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '79%' }, 
  20. //     watch: [Function] 
  21. // } 
  22.   
  23.   
  24. let rocky = new movies("Rocky", 1976, ["Drama", "Sports"], { 
  25.   IMDb: "8.1 /10", 
  26.   Metacritic: "70%" 
  27. }); 
  28.   
  29. console.log(rocky); 
  30.   
  31. // movies { 
  32. //     name: 'Rocky', 
  33. //         releaseYear: 1976, 
  34. //             genre: ['Drama','Sports'], 
  35. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '70%' }, 
  36. //     watch: [Function] 
  37. // } 

使用相同的構(gòu)造函數(shù),可以創(chuàng)建任意數(shù)量的對象。

重復(fù)的屬性名稱

如果兩個(gè)屬性使用相同的名稱,則第二個(gè)屬性將覆蓋第一個(gè)屬性。

 
 
 
 
  1. let Person = { 
  2.   name: "NeyVatsa", 
  3.   name: "Shashank" 
  4. }; 
  5. console.log(Person.name); 
  6.   
  7. // Shashank 

New關(guān)鍵字

對象構(gòu)造函數(shù)為給定值創(chuàng)建一個(gè)對象封裝器。如果該值不存在或未定義,它將創(chuàng)建并返回至一個(gè)空對象。否則的話,它將返回至一個(gè)與給定值類型一致的對象。

也可以使用new關(guān)鍵字創(chuàng)建對象。使用Javascript中的內(nèi)置對象構(gòu)造函數(shù),創(chuàng)建一個(gè)新的空對象;或者,此關(guān)鍵字可以與用戶定義的構(gòu)造函數(shù)一起使用。首先來看一個(gè)例子:

 
 
 
 
  1. let movies = newObject(); 
  2.   
  3. console.log(movies) 
  4. //{} 

下一步是向此空對象添加屬性和方法,可通過簡單的點(diǎn)標(biāo)記來實(shí)現(xiàn):

 
 
 
 
  1. let movies = newObject(); 
  2.   
  3. console.log(movies) 
  4. //{} 
  5.   
  6. movies.name = "Dead Poets Society"; 
  7. movies.releaseYear = 1989; 
  8. movies.genre = ["Drama", "Teen"]; 
  9. movies.ratings = { 
  10.   IMDb: "8.1 /10", 
  11.   Metacritic: "79%" 
  12. }; 
  13. movies.watch = () => { 
  14.   console.log("WatchOnline"); 
  15. }; 
  16.   
  17. console.log(movies); 
  18. // { name: 'Dead Poets Society', 
  19. //  releaseYear: 1989, 
  20. //  genre: [ 'Drama', 'Teen' ], 
  21. //  ratings: { IMDb: '8.1 / 10',Metacritic: '79%' }, 
  22. //  watch: [Function] } 
  23.   
  24. movies.watch(); 
  25. // Watch Online 

但我不建議這種做法,因?yàn)楹笈_有作用域解析,可以檢查構(gòu)造函數(shù)是內(nèi)置的還是用戶定義的。

使用ES6類創(chuàng)建對象

此方法與通過用戶定義的構(gòu)造函數(shù)使用new關(guān)鍵字非常類似。類是面向?qū)ο缶幊?OOP)的主要組件,可以創(chuàng)建實(shí)際上是對象的許多類實(shí)例。在ES6規(guī)范的支持下,現(xiàn)在可以用類替換構(gòu)造函數(shù)。

 
 
 
 
  1. classMovies { 
  2.   constructor(name,releaseYear, genre, ratings) { 
  3.     this.name = name; 
  4.     this.releaseYear = releaseYear; 
  5.     this.genre = genre; 
  6.     this.ratings =ratings; 
  7.   } 
  8.   watch() { 
  9.     console.log("WatchOnline"); 
  10.   } 
  11. let rocky = new Movies("Rocky", 1976, ["Drama", "Sports"], { 
  12.   IMDb: "8.1 /10", 
  13.   Metacritic: "70%" 
  14. }); 
  15. console.log(rocky); 
  16. // Movies { 
  17. //     name: 'Rocky', 
  18. //         releaseYear: 1976, 
  19. //             genre: ['Drama','Sports'], 
  20. //                 ratings: { IMDb:'8.1 / 10', Metacritic: '70%' } 
  21. // } 
  22.   
  23. rocky.watch(); 
  24. //Watch Online 

上面示例中,我已經(jīng)定義了構(gòu)造函數(shù)中的所有參數(shù)。方法可以是類的一部分,而聲明可以稍后添加到類的創(chuàng)建實(shí)例中,成為“對象”:

 
 
 
 
  1. /* 
  2. above example 
  3. */ 
  4. rocky.buy = function() { 
  5.   console.log("Buy theMovie"); 
  6. }; 
  7. rocky.buy(); 
  8. // Buy the Movie 

而這里方法是對象的一部分,不會影響原始類。

圖源:unsplash

在JavaScript這一基于原型的繼承語言中,類和構(gòu)造函數(shù)都模仿面向?qū)ο蟮睦^承模型。熟悉類非常有幫助,React這樣的流行JavaScript庫會經(jīng)常使用類句法。

你掌握了嗎?


新聞標(biāo)題:JavaScript中幾乎一切都是對象:創(chuàng)建對象的三種方式
文章地址:http://www.dlmjj.cn/article/dhiojid.html