俊哥的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');
【完】
“须菩提,于意云何?可以身相见如来不?”
“不也,世尊。不可以身相得见如来。何以故?如来所说身相,即非身相。”
佛告须菩提:“凡所有相,皆是虚妄。若见诸相非相,即见如来。”
转载于:https://www.cnblogs.com/tangjiao/p/8969003.html
俊哥的blog的一道题相关推荐
- 俊哥的HADOOP之路
自学的HADOOP第一天 1.寻址时间就是造成硬盘操作延迟的主要原因,如果硬盘操作中包含了大量的寻址操作那么读取大量数据就必然会花费更多时间,如果数据小B树有优势,如果数据大MapReduce 就有明 ...
- .net专家的精彩Blog
1.思归 http://blog.joycode.com/saucer/ 2.LoveCherry http://lovecherry.cnblogs.com/ 3.陕北吴旗娃 http://blog ...
- php xdebug测试,使用XDebug调试及单元测试覆盖率分析
今天我就就自己对XDebug使用的一些体验做一小段分享.XDebug也是因为需要是用来生成覆盖率分析文件才安装的,刚接触不久,平时用的也不是很频繁,但是这个的确是一个好工具,如果想要依赖它来分析程序的 ...
- Bookmarks(三)
Bookmarks 书签栏 tooltips提示效果,支持点击与经过显示,位置和效果可以自定义 - CSDN博客 疯狂的小萝卜头 - 博客园 [Kettle从零开始]第九弹之Kettle定时任务介绍 ...
- 周星驰《一本漫画闯天涯》看程序员悲剧人生
星仔70后出生,毕业于某211高校,上学那会很崇拜那些曾经的硅谷英雄,希望能够毕业后到国内知名企业工作,做白领,拿令人羡慕嫉妒恨的工资.即使在酒店勤工俭学那会仍然带着计算机编程书籍,最爱看的就是那本& ...
- 熊猫影子最新截获 病毒作者为熊猫烧香叫屈
2007年3月8日,江民反病毒中心截获"类熊猫"病毒,该病毒特征及感染方式都与"熊猫烧香"病毒极为相似.该病毒被命名为"熊猫影子"(英文名W ...
- python open方法下file模块_python-linecache模块读取文件用法
python-linecache模块读取文件用法详解 linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行. 1.linecache.getline ...
- UI高级----Images.xcassets
2019独角兽企业重金招聘Python工程师标准>>> 不知道大家有没有遇到过这种错误,这种错误导致的原因是多样的,最常见的是在拷贝的过程中出现的文件损坏.比如在 Mac 和 Win ...
- python punctuation_经验拾忆(纯手工)=gt; Python基本数据类型_Python - UCloud云社区...
数据结构 可变类型与不可变类型(重头戏) 基操: 可变类型:[], {} # 可增删改 查 不可变类型: int float str () # 无法增删改, 只可查 升操: + 与 += 的区别: 也 ...
最新文章
- Python:Resquest/Response
- linux eth0 device not found,mini2440的nfs文件系统挂不上问题“IP-Config: Device `eth0' not found”...
- 谢烟客---------Linux之Bash基础特性(2)
- 23 Python常用模块(一)
- 如何查看开发者账号何时到期
- 一个人会python能做什么_利用Python来预测一个人有没有女朋友!无所不能!
- ElementUI中el-upload中怎样限制上传文件的格式
- wxWidgets:wxTipProvider概述
- OpenCV改变图像的对比度和亮度
- 为了你,我一定要写诗
- 腾讯云+FFmpeg打造一条完备高效的视频产品链
- 加快Linux上yum下载安装包的速度(以CentOS 7,安装gcc为例)
- 利用PMOS实现LED恒流驱动芯片的通断控制
- mpu6050 z轴校准_MPU6050校准
- 配置分离式LANP源代码编译实例
- SQL Server 数据库无法重命名的解决
- FPGA可以转行数字IC验证吗?
- Android 启动系统相机,相册,裁剪图片及6.0权限管理
- 2.6顺序表和链表的优缺点(区别、特点)详解
- Hive 数据倾斜问题定位排查及解决(实际案例)