zoukankan      html  css  js  c++  java
  • 俊哥的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');

    【完】

    “须菩提,于意云何?可以身相见如来不?”

     “不也,世尊。不可以身相得见如来。何以故?如来所说身相,即非身相。”

      佛告须菩提:“凡所有相,皆是虚妄。若见诸相非相,即见如来。”

  • 相关阅读:
    Android自己定义组件系列【2】——Scroller类
    ostringstream的使用方法
    什么是Spring?Spring是什么?
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    伤不起的戴尔台式机XPS8700脆弱的蓝牙
    cocos2d-x-3.1 事件分发机制 (coco2d-x 学习笔记七)
    SSL工作原理
    AfxMessageBox和MessageBox差别
    oninput,onpropertychange,onchange的使用方法和差别
    Bootstrap网站模板
  • 原文地址:https://www.cnblogs.com/tangjiao/p/8969003.html
Copyright © 2011-2022 走看看