js工廠函數


經常會遇到工廠函數這個詞,不過javascript不是嚴格的面向對象語言,不像java,C#擁有類,所以工廠函數會變得比較模糊。

簡單來講,就是創建一個可以用來創建實例的函數,這樣每一個實例都是獨立的,互不影響

如:

 1 function Cat () {
 2   return {
 3         // 具體內容由實際業務定義,如工廠一樣
 4         type: 'cat',
 5         color: 'blacK'
 6     }  
 7 }
 8 
 9 
10 const catOne = new Cat()
11 const catTwo = new Cat()
12 // 上訴兩者實際都是黑貓,內容都是一樣,但是互不影響

由於是函數,所以可以增加參數,來優化這個工廠

如:

 1 function cat(color='red') {
 2     return {
 3         type: 'cat',
 4         color
 5     }
 6 }
 7 
 8 // 上述是一個帶默認參數值的工廠函數
 9 
10 // 實例
11 const redCat = new Cat()
12 const yellowCat = new Cat('yellow')

由於實際情況不同,如動物和貓的關系,你可能需要一個動物的工廠函數,但是又不想書寫太多的代碼,此時可以組合我們的工廠函數

 1 function Animal () {
 2     return {
 3         type: 'animal',
 4         // kinds是種類
 5         kinds: [
 6             Cat()
 7             // Dog()
 8         ]
 9     }
10 } 
11 
12 // 所以相當於聲明動物時候,動物的具體類型也跟着聲明 
13 const animal = new Animal()

還有幾種情況,如異步執行的工廠函數,這在實際業務中會比較常用到,比如獲取后在執行,這里可以使用Promise

 1 // 這里使用axios來獲取數據
 2 function getCity (listUrl) {
 3     return new Promise ((resovle, reject) => {
 4         axios.get(listUrl).then(result => {
 5             resovle({
 6                 error: '1',
 7                 data: result.json()
 8             })
 9         }).catch(reject) // 否則直接拋出異常
10     })
11 }

謝謝!

 

作者:一個熱愛改BUG的猴子——310672315@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM