js编程题总结

2023-11-08

lazyman

实现一个LazyMan,可以按照以下方式调用:
LazyMan(“Hank”)输出:
Hi! This is Hank!
 
LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
Hi! This is Hank!
//等待10秒..
Wake up after 10
Eat dinner~
 
LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~
 
LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出
//等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
 
以此类推。
复制代码

代码

function LazyMan(name){
    return new _LazyMan(name)
}

class _LazyMan {
    constructor(name){
        this.name = name 
        this.tasks = []
        this.task = (name => {
            console.log('add task')
            return () => {
                console.log(`Hi! This is ${name}!`)
                this.next()
            }
        })(name)
        this.tasks.push(this.task)
        // 等待 所有事件 入队(tasks)
        setTimeout(() => {
          console.log('第一次调用')
          this.next()
        }, 0);
    }

    eat(food) {
      console.log('add eat')
      const _eat = (food => {
        return () => {
          console.log(`Eat ${food}~`)
          this.next()
        }
      })(food)
      this.tasks.push(_eat)
      return this
    }

    sleep(time) {
      console.log("add sleep");
      const _sleep = (time => {
        return () => {
          setTimeout(() => {
            console.log(`Wake up after ${time}`)
            this.next()
          }, time);
        }
      })(time)
      this.tasks.push(_sleep)
      return this
    }
    // 放入队首
    sleepFirst(time) {
      console.log("add sleepFirst");
      const _sleepFirst = (time => {
        return () => {
          setTimeout(() => {
            console.log(`Wake up after ${time}`)
            this.next()
          }, time);
        }
      })(time)
      this.tasks.unshift(_sleepFirst)
      return this
    }

    next(){
      const task = this.tasks.shift()
      task && task()
    }
}


LazyMan('Hank').sleep(10).eat('dinner').sleepFirst(50)
复制代码

深拷贝

function deepClone(obj){
    function isObject(o){
        return (typeof o === 'object' || typeof o === 'function') && o != null
    }

    if(!isObject(obj)) throw new Error('参数不是对象')

    let isArray = Array.isArray(obj)

    let newObj = isArray ? [...obj] : {...obj}

    //console.log(Reflect.ownKeys(obj))
    Reflect.ownKeys(newObj).forEach(key => {
        newObj[key] = isObject(obj[key]) ? deepClone(obj[key]) : obj[key]
    })

    return newObj
}
复制代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js编程题总结 的相关文章

  • 京东首页实战(带商品栏)

    效果展示 在这里插入图片描述 https img blog csdnimg cn cdb0bf89b2b9415f814 项目结构 需要联系 224 855 7717
  • MySQL进阶面试题完全攻略

    除了基础题部分 本文还收集整理的MySQL面试题还包括如下知识点或题型 MySQL高性能索引 SQL语句 MySQL查询优化 MySQL高扩展高可用 MySQL安全性 问题1 char varchar的区别是什么 varchar是变长而ch
  • 雪过天晴:OTA熬过旅游业寒冬

    旅游业新年开门红的热闹余音犹在 OTA平台走入三年来最具总结意义的一个财报季 继携程 途牛后 同程旅行于3月21日公布了2022年全年财报 数据显示 2022年 同程旅行实现收入65 8亿元 经调整净利润6 5亿元 其中每个季度都保持了盈利
  • 再造STM32---第十九部分:I2C—读写 EEPROM

    本章参考资料 STM32F4xx 参考手册 STM32F4xx 规格书 库帮助文档 stm32f4xx dsp stdperiph lib um chm 及 I2C 总线协议 若对 I2C 通讯协议不了解 可先阅读 I2C 总线协议 文档的
  • stm32学习笔记-esp8266wifi模块连接云平台测试

    文章目录 一 ATK ESP8266模块简介 二 测试AT指令连接新大陆物联网云平台 一 ATK ESP8266模块简介 官方使用手册截图如下 我们知道这个wifi模块有三种模式 其串口通信波特率为115200 数据位为8 停止位为1 测试
  • 史上最全圣杯布局(转自前端神三元)

    圣杯布局如图 而且要做到左右宽度固定 中间宽度自适应 1 利用flex布局
  • 使用SSIS创建同步数据库数据任务

    SSIS SQL Server Integration Services 是用于生成企业级数据集成和数据转换解决方案的平台 使用 Integration Services 可解决复杂的业务问题 具体表现为 复制或下载文件 发送电子邮件以响应
  • 利用keil编写stm32循环点亮一LED灯

    利用keil编写stm32循环点亮一LED灯 在调试循环点亮一LED灯程序时 发现单步执行 能循环点亮 但连续执行时 不能循环点亮 后来发现 是我写的程序出了问题 应该在管脚置高和置低后均进行延时 程序如下 void LED Display
  • esp8266 eeprom_ESP8266内嵌网页配置WIFI及指令调试

    准备 1 智能网络模块 WIFI模块ESP8266 12S 12F 见底图2 Arduino IDE 最新版 1 8 13 目的 1 通过固件访问内置网页可以进行重置WIFI密码 见底图 2 通过固件内嵌网页可以进行指令测试 通过网页模拟串
  • Excel VBA 变量,数据类型&常量

    几乎所有计算机程序中都使用变量 VBA 也不例外 在过程开始时声明变量是一个好习惯 这不是必需的 但有助于识别内容的性质 文本 数据 数字等 在本教程中 您将学习 一 VBA变量 变量是存储在计算机内存或存储系统中的特定值 以后 您可以在代
  • 树的遍历(先序、中序、后序详解)

    树的遍历主要有三种 1 先序遍历 先遍历根节点 再遍历左节点 最后遍历右节点 2 中序遍历 先遍历左节点 再遍历根节点 最后遍历右节点 3 后序遍历 先遍历左节点 再遍历右节点 最后遍历根节点 总结 先 中 后就表示根节点的遍历处于哪个位置
  • Java开发环境搭建(进阶配置五 ——版本控制工具之GIT)

    与CVS SVN等集中式版本控制工具不同 Git是分布式版本控制工具 开发人员通过Checkout从中心版本库Copy一个完整的版本库到本地 就算不联网也可以进行commit update等操作 而且每次操作都是在本地进行 因而速度非常快
  • error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

    用VS2015编译从GitHub上下载的一段代码 出现如下的错误提示 error C4146 一元负运算符应用于无符号类型 结果仍为无符号类型 warning C4244 从 double 转换到 float 可能丢失数据 error C4
  • Numpy中花式索引和shape用法

    原文转载自我的博客benym cn 总结一下最近学习中容易出现问题的地方 代码 from numpy import randMat random randint 0 10 4 3 print 原矩阵 n randMat 索引从0开始计数 p
  • jenkins+python自动化测试持续集成

    一 首先我们安装Jenkins 我这里采用的是 msi应用程序 根据提示进行安装 傻瓜式 最后会打开默认的网页地址 http localhost 8080 如果端口有冲突 可以去Jenkins的安装目录下的这个文件去改端口 二 进入Jenk
  • C/C++编程笔记:详解三种指针(悬空指针、空指针和野指针)

    悬空指针 指向已删除 或释放 的内存位置的指针称为悬空指针 指针用作悬空指针有三种不同的方式 内存分配 函数调用 如果x是静态变量 则不会出现问题 或p不会悬空 输出 5 变量超出范围 无效指针 无效指针是一种特定的指针类型 void 指向
  • Mycat实现读写分离,主备热切换

    实验环境 ubutu server 14 Master IP 172 16 34 212 Slave IP 172 16 34 34 156 Mycat server IP 172 16 34 219 不涉及过多理论 只有实现的过程 mys
  • COM三大接口:IUnknown、IClassFactory、IDispatch

    转载自 http blog sina com cn s blog 86d10dc701014m2v html 1 COM组件有三个最基本的接口类 分别是IUnknown IClassFactory IDispatch 1 1 COM规范规定
  • vuejs+element UI 点击编辑表格某一行时获取内容填入表单

    如果是已经有点经验的同学 可以直接看下面这个函数 应该就能明白怎么回事 新手可以看下面的详细教程 函数 handleEdit function index row this editFormVisible true this editFor
  • 【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

    本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分 由于十一实验室不开门 所以部分代码还没有上传到Github 下位机 下位机使用Arduino 因为大一上刚学完用Arduino做循迹小车 其实Arduino作为ROS小车的下位机

随机推荐

  • Unity旋转角度范围限制

    因为Unity中在做旋转的时候是用四元数或者矩阵 有时候跟Transform组件面板显示的数值不一致 另外我们所有旋转角度常规数值其实是在 360 360度区间 所以我们判断一下 另外对于旋转角度范围予以限制 public float Cl
  • Linux进程间通信(IPC)的几种方式

    概述 进程间通信 IPC Inter Process Communication 指至少两个进程或线程间传送数据或信号的一些技术或方法 进程是计算机系统分配资源的最小单位 进程是分配资源最小的单位 而线程是调度的最小单位 线程共用进程资源
  • 淘宝下单时结算显示美金,解决办法

    在亲 若您在淘宝下单时结算显示美金 说明您的所在地区和支付方式设置结算方式为国际货币 你可以通过完成以下3个步骤修改为人民币支付 1 我的淘宝 右上方 设置 通用 国家 地区 选择非中国大陆的其他区域 确保步骤2中的 国际支付设置 可显示出
  • (干货)记前端工程师面试题,一起带大家理一理

    此文是上篇 如何拿到大厂offer面试题 技术征文 下 更新下剩下题目及答题思路 1 请简单描述http协议的请求报文和响应报文的组成格式 HTTP请求报文 一个HTTP请求报文由请求行 request line 请求头部 header 空
  • GET获取表单数据的方法

    两种最常被用到的方法是 GET 和 POST 关于GET请求 GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回数据
  • Java 7:Java集合从不懂到更不懂,不信来看

    集合 1 集合关系网 关系网 数组 Arrays asList就成了List 接口Collection 3个分支 List Set Queue List两个分支 Sequential 代表作是LinkedList 和RandomAccess
  • 第十五课 状语从句

    文章目录 前言 一 时间状语从句 时间状语从句 主语 谓语 宾语 或者 主语 谓语 宾语 时间状语从句 时间状语从句 主语 系动词 表语 或者 主语 系动词 表语 时间状语从句 1 when while as 引导的时间状语从句 when
  • 中标麒麟系统安装达梦数据库

    前言 近期 参加达梦公司组织的DCA认证培训 在中标麒麟下安装DM8数据库 以下是安装笔记 一 安装DM数据库 1 服务器信息查看 root localhost uname r 3 10 0 957 el7 x86 64 root loca
  • WordBias

    目录 WordBias 安装 界面 案例1 极端主义 案例2 pretty beautifull 论文 词嵌入做为一种词向量模型 可以从文本中计算出隐含的上下文情景信息 态度及偏见 通过词向量距离的测算 就可以间接测得不同群体对某概念 组织
  • 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...

    100道 关于经典软件工程专业论文选题汇总 作为大学生的毕业生应该明白了软件工程专业论文题目选什么比较好 选一个好的题目后续的软件工程专业论文写作起来会更轻松 一 比较好写的软件工程专业论文题目 1 面向软件工程专业的 算法设计与分析 课程
  • python的exec函数

    exec 是 Python 内置的一个函数 用于在运行时执行动态生成的 Python 代码 它以字符串形式接收一个代码块 并将其编译并执行为可执行的 Python 代码 exec 函数的语法如下 exec object globals No
  • Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究

    在Android中提供了两种智能输入框 它们是AutoCompleteTextView MultiAutoCompleteTextView 它们的功能大致一样 显示效果像Google搜索一样 当你在搜索框里输入一些字符时 至少两个字符 会自
  • 【商业知识】中国消费者洞察

    文章目录 一 市场 中国消费市场已进入复苏期 二 政策 政策不断优化消费环境 三 社会 消费者逐步步入正确消费时代 四 品牌 科普专业知识 加深消费者对技术力的感知 五 电商直播 提供源头优质产品 提高生活质量 六 信息平台 科学消费和内容
  • C++ 模板特化

    我们不可能写出对所有类型都适合的模板 某些情况下 通用模板定义对于某个类型可能是完全错误的 这个时候我们需要编写比模板函数更有效率的函数 这就是模板特化 思考一个例子 编写比较函数的泛型函数模板 template
  • 使用IDEA打不开setting怎么解决?

    问题 汉化IDEA后 怎么打不开setting 解决办法 在关闭idea的条件下 使用解压软件打开汉化包 打开不是解压哦 将其messages文件夹内的 IdeBundle properties 系统设置 setting 外观选项加载不出来
  • 建立实体类和数据库映射(注解)

    1 建立实体类和数据库映射 Select select from user Results id resultMap value Result id true property userId column id Result propert
  • 服务器中勒索病毒了

    非常重要的一点 备份好数据 异地备份
  • 多版本node的安装与切换详细操作

    多版本node的安装与切换详细操作 安装多版本node的原因 方法一 利用nvm进行管理 NVM 简介 安装前须知 卸载已安装的nodeJS nvm 的安装与使用 node 的不同版本安装及切换 方法二 通过配置环境变量 切换node时只需
  • LeetCode刷题指南(一)

    以下是我个人做题过程中的一些体会 1 LeetCode的题库越来越大 截止到目前 已经有321个问题了 对于大多数人来说 没有时间也没有必要把所有题目都做一遍 时间充裕可以随意 刷个100题左右应该就差不多了 可以考虑序号为前100多的题目
  • js编程题总结

    lazyman 实现一个LazyMan 可以按照以下方式调用 LazyMan Hank 输出 Hi This is Hank LazyMan Hank sleep 10 eat dinner 输出 Hi This is Hank 等待10秒