为了账号安全,请及时绑定邮箱和手机立即绑定

js写一个链式调用的函数

js写一个链式调用的函数

www说 2019-03-14 18:15:54
写一个print() 函数,能够通过如图上不同的调用,显示不同的结果。谁知道怎么写的?!
查看完整描述

5 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

function Print () {

  function createAPrinter () {

    return {

      Print: function printA () {

        console.log('aaaaa');

      }

    }

  }


  createAPrinter.Print = function () {

    return function printB () {

      console.log('bbbbb');

    }

  }


  return createAPrinter;

}

要详细讲下吗?其实一步一步推并不难的:

首先我们声明这样两个函数:


function printB () {

  console.log('bbbbb');

}

function printA () {

  console.log('aaaaa');

}

看一看题目,你会发现:


Print().Print() === printB

Print()() === printA

于是我们往前推一步,再两个函数,他们分别返回 printB 和 printA:


function createPrintB () {

  return printB;

}

function createPrintA () {

  return printA;

}

看看上面我们发现的等式,你会发现:


Print().Print === createPrintB

Print() === createPrintA

// 你还会发现

createPrintA.Print === createPrintB

到这里你就可以写出:


function Print () {

  function createPrintA () {

    return function printA () {

      console.log('aaaaa');

    }

  }


  function createPrintB () {

    return function printB () {

      console.log('bbbbb');

    }

  }

  

  createPrintA.Print = createPrintB;


  return createPrintA;

}

然后整理一下就是我上面的答案了。


希望对你有帮助


查看完整回答
1 反对 回复 2019-03-22
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

function Print() {

    var print = function () {

        return {

            Print: function () {

                console.log("aaaaa")

            }

        }

    }

    print.Print = function () {

        return function () {

            console.log("bbbbb")

        }

    }

    return print;

}

Print().Print()();

Print()().Print();


查看完整回答
反对 回复 2019-03-22
?
偶然的你

TA贡献1841条经验 获得超3个赞

var Print=new Proxy(function(){},{

        apply:function(target){

            target.index=~~target.index+1;

            if(target.index %3 ==0){

                console.log(String.fromCharCode(target.index/3+96).repeat(3));

            }

            return Print;

        }

    });

    Print.Print=Print;

    Print().Print()();

    Print()().Print();


查看完整回答
反对 回复 2019-03-22
?
慕斯王

TA贡献1864条经验 获得超2个赞

function Print() {

  function a() {

    return {

      Print() {

        console.log('aaaaa')

      }

    }

  }

  a.Print = () => () => console.log('bbbbb')

  return a

}


查看完整回答
反对 回复 2019-03-22
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

https://img1.sycdn.imooc.com//5c949e9000018efb04300666.jpg

一楼妙啊。

查看完整回答
反对 回复 2019-03-22
  • 5 回答
  • 0 关注
  • 797 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号