腾讯笔试遇到的一道题,百思不得其解,求助大牛们解答

实现一个 HardMan:
HardMan("jack") 输出:
I am jack

HardMan("jack").rest(10).learn("computer") 输出
I am jack
//等待10秒
Start learning after 10 seconds
Learning computer

HardMan("jack").restFirst(5).learn("chinese") 输出
//等待5秒
Start learning after 5 seconds
I am jack
Learning chinese

我的答案:
function HardMan(name){
var fucntionTarget = '';
this.rest = function(minnus){
var timer = setInterval(function(){
console.log("Start learning after "+ minnus +" seconds");
console.log('Learning '+fucntionTarget);
clearInterval(timer);
},minnus*1000);
return this;
};
this.learn = function(target)
{
fucntionTarget = target;

};
this.restFirst = function(minnus){
        这个不会写。

};
console.log('I am '+ name);
return this;
}
#腾讯#
全部评论
function hardMan(str) { this.queue = [] this.name = str this.queue.push(() => { console.log(this.name); this.next() }); } hardMan.prototype.rest = function (wait) { const func = () => { setTimeout(() => { console.log(`Start learning after ${wait} seconds`) this.next() }, wait * 1000) } this.queue.push(func) return this } hardMan.prototype.restFirst = function (wait) { const func = () => { setTimeout(() => { console.log(`Start learning after ${wait} seconds`) this.next() }, wait * 1000) } this.queue.unshift(func) return this } hardMan.prototype.learn = function (str) { const func = () => { console.log(`Learning ${str}`) } this.queue.push(func) this.next() } hardMan.prototype.next = function () { if (this.queue.length === 0) return const func = this.queue.shift() func() } const HardMan = (name)=>{ return new hardMan("jack"); }
4 回复 分享
发布于 2023-08-09 17:56 北京
class HardMan {constructor(name) {this.name = name;this.taskQueue = Promise.resolve();//考察执行栈和事件循环 setTimeout(() => {this.execute();})}execute() {if (this._restFirst) {this.realRest(this._restFirst);this._restFirst = 0;}this.outName();if (this._rest) {this.realRest(this._rest)}if (this._learn) {this.taskQueue = this.taskQueue.then(() => {console.log(`Learning ${this._learn}`)});}}outName() {this.taskQueue = this.taskQueue.then(() => {console.log(`I am ${this.name}`)});return this;}rest(seconds) {this._rest = seconds;return this;}realRest(seconds) {this.taskQueue = this.taskQueue.then(() => { return new Promise(resolve => {setTimeout(() => {console.log(`After rest ${seconds} seconds`);resolve();}, seconds * 10);});});return this;}restFirst(seconds) {this._restFirst = seconds;return this;}learn(subject) {this._learn = subject;return this;}}
1 回复 分享
发布于 2024-04-17 22:35 湖南
function Hard(str){     var that = {};     that.__proto__ = arguments.callee.prototype ;     that.str = "I am " + str;     setTimeout(that.settime.bind(that));     return that; } Hard.prototype.yanchi = function(m){     console.log("sleep")     var d = new Date();     var n = this._restFirst*1000;     for(var i = 0; i < d; i++){         if( new Date() - d > n ){             console.log("sleep end")             return false;         }     } } Hard.prototype.learn = function( sr ) {     this._learn = sr;     return this; } Hard.prototype.rest = function( num ){     this._rest = num;     return this; } Hard.prototype.restFirst = function ( n ) {     this._restFirst = n;     this._rest = 0;     return this; } Hard.prototype.settime = function(){     var { str, _learn, _rest, _restFirst} = this;     var num = _rest || _restFirst;     if( _restFirst !== undefined ){         this.yanchi();     }else{         console.log(str);     }     if(num){         setTimeout(function(){             console.log( `Start learning after ${ num } seconds` );             if( _restFirst !== undefined ){                 console.log(str);             }             if( _learn ){                 console.log( "Learning " + _learn )             }         },_rest*1000)     } }
1 回复 分享
发布于 2018-04-18 23:28
去年腾讯面试遇到了这道题,当时没写出来,后来想了想写出来了,给大家两个种满分解题代码吧:https://mp.weixin.qq.com/s/-hEjxY0yI6ZBTzAlc3xwAw
点赞 回复 分享
发布于 2024-08-23 09:50 广东
跟lazyman一摸一样的呀
点赞 回复 分享
发布于 2018-04-18 23:31
微信小程序事业群的
点赞 回复 分享
发布于 2018-04-17 23:03
哪个事业群的面试题
点赞 回复 分享
发布于 2018-04-17 10:43

相关推荐

1.实习介绍2.浏览器拿到HTML响应之后,渲染页面过程3.CSS&nbsp;是什么时候加载的?是等&nbsp;DOM&nbsp;树构建完才开始吗4.HTML&nbsp;解析过程中碰到一个&nbsp;&lt;script&gt;&nbsp;标签,浏览器会怎么处理5.你刚才提到MutationObserver,那如果浏览器不支持这个&nbsp;API,你会用什么方式实现类似功能6.我们看这一段代码:图1&nbsp;这段代码打印的结果是什么?为什么不是local?7.如果我把刚才那个var&nbsp;name&nbsp;=&nbsp;'local'&nbsp;改成let,那输出结果会变吗8.解释一下什么是“暂时性死区”为什么let声明变量之前不能访问9.讲一下js的作用域有哪几种10.我们现在有一个全局变量是&nbsp;let&nbsp;a&nbsp;=&nbsp;1,页面上有个按钮绑定了一个&nbsp;onclick&nbsp;事件打印&nbsp;a,我把&nbsp;a&nbsp;从浏览器控制台删掉了,会报错吗?为什么11.讲一下作用域链,为什么在try-catch&nbsp;里&nbsp;catch(err)&nbsp;中的&nbsp;err&nbsp;是块级作用域,但try里不是?12.&nbsp;果我有一个变量在&nbsp;setTimeout&nbsp;里修改了值,而外部同时访问这个值,能保证拿到最新值吗为什么13.我给你两个连续的style标签,里面写了两个相同选择器但不同样式,渲染时到底谁生效?为什么?14.如果我动态用innerHTML插入一段&nbsp;&lt;script&gt;,它会执行吗?和用createElement的方式插入有什么不同15.我页面上用了iframe做内嵌组件,结果一个按钮点击事件怎么都监听不到,为什么16.讲讲webpack的loader和plugin的执行顺序17.react&nbsp;的&nbsp;useEffect&nbsp;和&nbsp;useLayoutEffect&nbsp;有什么区别?哪个先执行18.&nbsp;vue&nbsp;的响应式是怎么实现的?那我问你,Object.defineProperty&nbsp;为什么不能监听数组的&nbsp;push?Vue2&nbsp;是怎么解决的19.如果我在页面里创建了一个超大的数组&nbsp;new&nbsp;Array(1e9),但没赋值,也不访问,浏览器会卡死吗20.我页面上只放了&nbsp;1&nbsp;张图,但&nbsp;Lighthouse&nbsp;跑出来提示资源加载过大,啥原因?21.手撕:数组中第k个最大元素
点赞 评论 收藏
分享
评论
3
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务