俊哥的blog的一道题
题目:
实现一个person对象,有eat和dinner两种方法
请用实例【依次类推】
new person('Tom').sleep(10).eat('dinner');
//输出 console.log("hello Tom");
//等待10s后输出
console.log("sleep 10s");
console.log("eat dinner");
看似是实现一个对象上面方法的链式调用(一般都是在前一个方法的调用,该题目的sleep的调用,return this);然后就可以进行链式调用。先来一个没有等待时间的链式调用,如下:
var person = function(name){
this.name = name;
console.log(`hello ${name}`);
this.sleep = function(time){
console.log(`no sleep`);
return this;
}
this.eat = function(food){
console.log(`eat ${food}`);
}
}
new person("Tom").sleep(10).eat("dinner");
Thus,要在sleep的方法里面实现等待10s后进行输出肯定是要有一个延迟,该延迟完成后方可继续eat的执行,因此可以利用ES6的promise,给该对象加入一个新的promise属性,在sleep里面进行赋值并返回,在eat方法中进行promise.then对象的调用。代码如下:
var person = function(name){
this.name = name;
console.log(`hello ${name}`);
}
person.prototype.sleep = function(time){
this.promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(`sleep ${time}s`);
resolve();
},time*1000);
})
return this;
}
person.prototype.eat = function(food){
this.promise.then(res=>{
console.log(`eat ${food}`);
})
}
new person("Tom").sleep(10).eat("dinner");
//即可实现原题的返回结果
其实这道题最开始可以使用回调函数方法实现,只不过原理大致相同,主要还是在sleep方法里面加入了一个属性方法,在eat方法里面延迟sleep的属性方法,进行返回。
var person = function(name){
this.name = name;
console.log(`hello ${this.name}`);
}
person.prototype.sleep = function(time){
var _self = this;
this.cb = function(fn){
setTimeout(function(){
console.log(`sleep ${time}s`);
fn()
},1000*time)
}
return this;
}
person.prototype.eat = function(food){
this.cb(function(){
console.log(`eat ${food}`);
})
return this;
}
new person('Tom').sleep(10).eat('dinner');
【完】
“须菩提,于意云何?可以身相见如来不?”
“不也,世尊。不可以身相得见如来。何以故?如来所说身相,即非身相。”
佛告须菩提:“凡所有相,皆是虚妄。若见诸相非相,即见如来。”
俊哥的blog的一道题的更多相关文章
- BZOJ-3211花神游历各国 并查集+树状数组
一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...
- 在html中怎么格式化输出json字符串
#今天的项目用到,看俊哥找到,特此记录下来 步骤: 1.在html页面中输入下面的标签,必须是在pre标签内输出格式才会生效: <pre id="songReqJson"&g ...
- 51nod1524 最大子段和V2
题干 N个整数组成的序列a[1],a[2],a[3],-,a[n],你可以对数组中的一对元素进行交换,并且交换后求a[1]至a[n]的最大子段和,所能得到的结果是所有交换中最大的.当所给的整数均为负数 ...
- JavaScript 笔记 ( Prototype )
这阵子实在好忙 ( 这样说好像也不是一两个月了... ),然后因为工作伙伴都是 JavaScript 神之等级的工程师,从中也学到不少知识,毕竟就是要和强者工作才会成长呀!为了想好好瞭解他们写的程式码 ...
- 【BZOJ】【1061】【NOI2008】志愿者招募
网络流/费用流 OrzOrzOrz,这题太神了不会捉. 题解:https://www.byvoid.com/blog/noi-2008-employee/ 这道题正确的解法是构造网络,求网络最小费用最 ...
- 就要从SDG离职了
在知乎上看到有个提问,你为什么从盛大离职.我八月份在盛大游戏实习之间,下个星期准备辞职迎接新的挑战.本文也将提到我在盛大实习的经历以及离职的原因.当然,不会涉及很多SDG内部的管理以及技术上的秘密. ...
- [HZWER]藏妹子之处
问题描述 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一 ...
- MySQL 5.6 SQL 优化及 5.6手册
http://blog.chinaunix.net/uid-259788-id-4146363.html http://www.cnblogs.com/Amaranthus/p/4028687.htm ...
- [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】
题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...
随机推荐
- iOS简单音乐实现、React-Native完整项目、仿闲鱼京东列表分页、语音识别、网络加载过度动画等源码
iOS精选源码 iOS快速入手语音识别.听写.评测.播报 网络加载数据的过渡动画(仿简书网页) iOS 封装跑马灯和轮播效果 crash防护组件,适用常见常用的数组,字典等crash保护 iOS:高仿 ...
- [LC] 345. Reverse Vowels of a String
Write a function that takes a string as input and reverse only the vowels of a string. Example 1: In ...
- VSTO自动安装、卸载工具
使用本工具,不需要制作VSTO外接程序安装包,就可以把你的作品自动安装到其他电脑. 用法:下载VSTO_Setup.rar,解压缩,然后把你开发好的Debug文件夹和VSTO_Setup.exe一起发 ...
- 推送至远程仓库使用git push -u的原因
第一次把本地仓库推送至远端时,为了以后方便一定要使用 git push -u origin master [此处是把本地的master分支推送至远程的master分支]
- 林轩田机器学习基石笔记2—Learning to Answer Yes/No
机器学习的整个过程:根据模型H,使用演算法A,在训练样本D上进行训练,得到最好的h,其对应的g就是我们最后需要的机器学习的模型函数,一般g接近于目标函数f.本节课将继续深入探讨机器学习问题,介绍感知机 ...
- 吴裕雄--天生自然HTML学习笔记:HTML 简介
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- gitlab两种连接方式:ssh和http对比
共同点: 都可以使用git clone 地址 .将项目下载到本地. 不同点: 当将本地修改上传到远程服务器时,http需要输入用户名密码,ssh. 1.ssh方式: 这是一种相对安全的方式这要求将本地 ...
- 用数组实现栈(C++)
#include <iostream> //栈的数组实现 using namespace std; #define MAXSIZE 10; template<class T> ...
- 编译gcc报错make[3]: Leaving directory `/usr/local/src/gcc-7.4.0/build/gcc' make[2]: *** [all-stage1-gcc] Error 2 处理
因业务需要安装7.4高版本gcc时报错: configure: error: in `/usr/local/src/gcc-7.4.0/build/gcc': configure: error: C+ ...
- P6跨级晋升P8再到P10,我的11年成长之路
来自:语雀,作者:玉伯 链接:https://www.yuque.com/yubo/morning/grow-up-at-alibaba 注:这是在阿里内部前端大学的一个分享,整理了一份对外的版本,希 ...