?javascript面试题,实现链式调用

发布时间:2024年01月05日

// 实现一个链式调用

// hello.name("George").sleep(3).like("sports");

// log:I'm George

// 3s后log:sleep after 3s

// log:I like sports

思路:

  1. 根据要求构建new一个对象?

    const hello = {}
  2. 在对象中构建函数name,sleep,like

    const hello = {
        name(name){},
        sleep(time){},
        like(sport){}
    
    }

    3.填充hello对象内部方法和参数,定义一个tasks数组保存任务,然后再从任务列表每次取出一个任务执行,如下:

    const hello = {
      tasks: [],
      name(name) {
        const fn = () => {
          console.log(`I am ${name}`);
          this.run();
        };
        this.tasks.push(fn);
        return this;
      },
      sleep(time) {
        const fn = () => {
          setTimeout(() => {
            console.log(`sleep after ${time}`);
            this.run();
          }, time * 1000);
        };
        this.tasks.push(fn);
        return this;
      },
      like(sport) {
        const fn = () => {
          console.log(`I like ${sport}`);
          this.run();
        };
        this.tasks.push(fn);
        this.run();
        return this;
      },
    // 取出任务执行  
      run() {
        const fn = this.tasks.shift();
        fn && fn();
      },
    };

    4.执行结果

    hello.name("George").sleep(3).like("sports");
    

文章来源:https://blog.csdn.net/fxh200948140216/article/details/135356790
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。