美文网首页
重写 fn.toString

重写 fn.toString

作者: Allan要做活神仙 | 来源:发表于2021-09-16 14:56 被阅读0次

    2021-09-16

    1、重写 fn.toString

    function bar(){
      return 2;
    }
    bar.toString = function(){ return 1 }
    
    alert(bar) // 1
    bar + 1 // 2
    
    bar()
    

    重写了一个方法的 toString 方法,然后如果这个方法当字符串用,那么就会执用方法上的 toString 方法,并返回结果,然后再作处理...

    当然,如果执行这个函数,还是能执行的,这时与 toString 就没啥关系了。

    2、相关面试题:

    请编写一个函数使得其被以下任一方式调用都可得到预期结果。

    console.log(sum(2,3));   // Outputs 5
    console.log(sum(2)(3));  // Outputs 5
    console.log(sum(2,3,4);  // Outputs 9
    console.log(sum(2)(3)(4);  // Outputs 9
    

    解题:

    function  add() {
      let args = [...arguments]; // 类数组切换为数组
      let inner = function() {
        args.push(...arguments); // 存储数组
        return inner; // 利用闭包
      }
    
      // 关键:巧用 toString 隐式转换,在 add 执行后,依旧能返回重写 to String 的返回结果
      inner.toString = function() {
        return args.reduce((a, b) => a + b);
      }
      
      return inner;
    }
    

    相关文章

      网友评论

          本文标题:重写 fn.toString

          本文链接:https://www.haomeiwen.com/subject/spbrgltx.html