• 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

    以梦为马
  • 相关阅读:
    The password has to have a minimum of 6 characters, including at least 1 small letter, 1 uppercase letter and 1 number
    Angular i18n的技术分享、踩过的坑
    转: .Net 4.0 ExpandoObject 使用
    min_square
    KALMAN PYTHON
    双系统安装 win + ubuntu
    docker
    drl
    shell
    导航定位方案
  • 原文地址:https://www.cnblogs.com/lsAxy/p/12674761.html
Copyright © 2020-2023  润新知