zoukankan      html  css  js  c++  java
  • 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

    以梦为马
  • 相关阅读:
    lua 语言基础
    C语言基础
    文件夹目录排序
    C#调用Server_SQL
    SQL语言基础
    批量修改文件名
    快捷键Alt、Shift、Ctrl 点击事件
    第一节:基础语法
    一:ASP.NET基础知识(二)
    孩子,我首先希望你自始至终都是一个理想主义者!
  • 原文地址:https://www.cnblogs.com/lsAxy/p/12674761.html
Copyright © 2011-2022 走看看