首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >按照调用实例,实现下面的Person方法

按照调用实例,实现下面的Person方法

原创
作者头像
剁椒鱼鳞
发布于 2023-05-30 02:18:34
发布于 2023-05-30 02:18:34
22900
代码可运行
举报
文章被收录于专栏:前端小学生前端小学生
运行总次数:0
代码可运行

要求如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Person("Li");
// 输出: Hi! This is Li!

Person("Dan").sleep(10).eat("dinner");
// 输出:
// Hi! This is Dan!
// 等待10秒..
// Wake up after 10
// Eat dinner~

Person("Jerry").eat("dinner").eat("supper");
// 输出:
// Hi This is Jerry!
// Eat dinner~
// Eat supper~

Person("Smith").sleepFirst(5).eat("supper");
// 输出:
// 等待5秒
// Wake up after 5
// Hi This is Smith!
// Eat supper

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Person2(name){
    this.isRunFlag = false;
    this.name = name;
    this.taskArr = [];
    function task (name) {
        console.log(`Hi! This is ${name}!`);
    }
    this.taskArr.push(task.bind(this, name));
    this.run()}
Person2.prototype.eat = function (food) {
    const task = food => {
        console.log(`Eat ${food}~`);
    }
    this.taskArr.push(task.bind(this, food));
    this.run();
    return this;
}
Person2.prototype.sleep = function (time) {
    const task = new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`Wake up after ${time}`);
            resolve();
        }, time * 1000);
    })
    this.taskArr.push(task);
    this.run();
    return this;
}
Person2.prototype.sleepFirst = function (time) {
    const task = new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(`Wake up after ${time}`);
            resolve();
        }, time * 1000);
    })
    this.taskArr.unshift(task);
    this.run();
    return this;
}
Person2.prototype.run = function () {
    if (this.isRunFlag) {
        return;
    }else{
        this.isRunFlag = true;
        const gogogo = () => {
            if (this.taskArr.length) {
                let task = this.taskArr.shift();
                if (task.then) {
                    task.then(() => {
                        gogogo();
                    })
                } else {
                    task();
                    gogogo();
                }
            } else {
                this.isRunFlag = false;
            }
        }
        Promise.resolve().then((res) => {
            gogogo();
        }).catch((error) => {
            console.log("error:", error);
        })
    }
}
function Person(name){
    return new Person2(name);
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于 网红题 LazyMan 的个人实现
每执行一次动作实际上就是队列push一个事件(event)如果是xxFirst 函数则是 unshift 一个事件(event)
腾讯IVWEB团队
2020/06/24
3350
大厂(微信)面试题--实现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').sleep(10).eat('dinner').eat('supper')输出 Hi This is Hank! Eat dinner~ Eat supper~
winty
2019/12/22
7030
面试必备良药之前端Q本周N题汇总
最近起了一个新项目,叫每周N题,N<=5。前端面试题虽然五花八门,但是我们也确实可以从中学到知识。所以我觉得应该有个地方收录一下,每周做几题,既可以考验自己知识的广度又可以挖掘深度,挺好的。
winty
2019/12/21
3890
LazyMan的深入解析和实现
1.方法链式调用  2.类的使用和面向对象编程的思路  3.设计模式的应用  4.代码的解耦  5.最少知识原则,也即 迪米特法则(Law of Demeter)  6.代码的书写结构和命名
我是leon
2019/08/28
5990
大厂前端面试考什么?2
JSONP 核心原理:script 标签不受同源策略约束,所以可以用来进行跨域请求,优点是兼容性好,但是只能用于 GET 请求;
loveX001
2023/01/04
6280
滴滴前端一面必会面试题汇总
这两种方式都是提高网页性能的方式,两者主要区别是一个是提前加载,一个是迟缓甚至不加载。懒加载对服务器前端有一定的缓解压力作用,预加载则会增加服务器前端压力。
hellocoder2029
2022/09/13
5230
ES6新功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ES6新功能</title> </head> <body> <h1>1.展开操作符</h1> <script> 'use strict'; let A = [1, 2, 3, 4]; let B = [0, ...A]; console.log(B); /
越陌度阡
2020/11/26
5010
前端面试什么样的回答才能让面试官满意_2023-03-01
结合两种加密⽅式,将对称加密的密钥使⽤⾮对称加密的公钥进⾏加密,然后发送出去,接收⽅使⽤私钥进⾏解密得到对称加密的密钥,然后双⽅可以使⽤对称加密来进⾏沟通。
jsisbset
2023/03/01
3570
10个常见的前端手写功能,你全都会吗?
万丈高楼平地起,地基打的牢,才能永远立于不败之地。今天给大家带来的是10个常见的 JavaScript 手写功能,重要的地方已添加注释。有的是借鉴别人的,有的是自己写的,如有不正确的地方,欢迎多多指正。
猿来是前端
2022/09/19
3220
要求设计 LazyMan 类,实现以下功能
功能难点是要以指定顺序执行代码,方法调用顺序又不与执行顺序不对等,所以核心目的是创建一个任务队列,这个任务队列,必须是同步执行的,将子任务插入队列前面或者后面,依次执行这些任务 vue批量异步更新也似类是似的思想
刘嘿哈
2022/10/25
2480
分享10个面试题会经常出现的 JS 手写函数代码,你都会写吗?
英文 | https://medium.com/@cookbug/10-common-front-end-handwriting-functions-do-you-know-all-of-them-9deb1ffb922d
前端达人
2022/03/25
5150
2022前端都考察些什么
JSON 是一种基于文本的轻量级的数据交换格式。它可以被任何的编程语言读取和作为数据格式来传递。
loveX001
2022/09/27
5880
es6新语法+vue2的学习笔记分享
shigen
2023/09/15
3140
es6新语法+vue2的学习笔记分享
【前端面试题】我靠它拿到了大厂Offer
instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。
前端修罗场
2023/10/07
1.2K0
【前端面试题】我靠它拿到了大厂Offer
每日两题 T10
0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
合一大师
2020/07/17
4840
2023秋招前端面试必会的面试题_2023-03-15
描述:实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有 limit 个。
用户10377376
2023/03/15
6470
精选大厂高频 100 道面试题请收下
在 2019 年 1 月 21 日这天,「壹题」项目正式开始,在这之后每个工作日都会出一道高频面试题,主要涵盖阿里、腾讯、头条、百度、网易等大公司和常见题型。得益于大家热情参与,现在每道题都有很多答案,提供的解题思路和答案也大大增长了我的见识,到现在已累积 100 道题目,『 8000+ 』Star 了,可以说你面试中遇到过的题目,在这里肯定能发现熟悉的身影。
桃翁
2019/08/06
1.4K0
精选大厂高频 100 道面试题请收下
10个常见的前端手写功能,你全都会吗?
万丈高楼平地起,地基打的牢,才能永远立于不败之地。今天给大家带来的是10个常见的 JavaScript 手写功能,重要的地方已添加注释。有的是借鉴别人的,有的是自己写的,如有不正确的地方,欢迎多多指正。
CRMEB商城源码
2022/07/20
4320
常用ES6-ES10知识点总结
在工作中我们会常用到的一些es6-es10的一些特性还记得多少,今天就让我们重新复习一遍
小周sir
2020/02/14
6870
32个常考的手写面试题,值得动手练一练
https://juejin.cn/post/6963167124881670152
前端达人
2021/06/16
8330
相关推荐
关于 网红题 LazyMan 的个人实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档