【问题标题】:JS chaining functionsJS 链接函数
【发布时间】:2019-12-06 14:34:07
【问题描述】:

我正在编写一个应该像这样工作的函数:

checker(3).equals(3) // true
checker(3).not().equals(3) // false
checker(3).not().equals(4) // true
checker(3).not().not().equals(4) // false

我想出的代码:

function checker(num) {
  let number = num
  return {
    not() {
      number = !number
      return this
    },
    equals(nmb) {
      return number === nmb
    }
  }
}

我无法理解not() 应该做什么才能让checker(num) 像它应该的那样工作。

【问题讨论】:

    标签: javascript chaining


    【解决方案1】:

    您可以添加另一个布尔属性,根据其值更改 equals 的工作方式。

    function checker(num) {
      let number = num
      let not = false
      return {
        not() {
          not = !not
          return this
        },
        equals(nmb) {
          return not ? number !== nmb : number === nmb
        }
      }
    }
    
    console.log(checker(3).equals(3)) // true
    console.log(checker(3).not().equals(3)) // false
    console.log(checker(3).not().equals(4)) // true
    console.log(checker(3).not().not().equals(4)) // false

    【讨论】:

    • 你可以用(number === nmb) !== not替换not ? number !== nmb : number === nmb
    【解决方案2】:

    可能是这样的:

    function checker(num) {
      let number = num
      let beTrue = true;
      return {
        not() {
          beTrue = !beTrue;
          return this
        },
        equals(nmb) {
          return (number === nmb) === beTrue;
        }
      }
    }
    

    它似乎满足您的要求。希望对你有帮助

    【讨论】:

      【解决方案3】:

      一个 ES6 approach

      const checker=(number, negate)=>{
          const neg = negate || false;
        return {
          not(){
              return checker(number, !neg);
          }, 
          equals(number2){
              if (neg) return number != number2;
            return number == number2;
          }
        }
      }
      

      什么不应该() 这样做才能使 checker(num) 按预期工作。

      不能返回新的检查器。

      【讨论】:

        【解决方案4】:

        我想我会让notfunction 控制操作员,比如

        function checker(num) {
          let operator = 'equals'; 
          let number = num
          return {
            not() {
              if(operator==='equals')    
                 operator = 'not equals'; 
              else 
                  operator = 'equals'; 
              return this
            },
            equals(nmb) {
              if(operator==='equals')  
                 return number === nmb
              else 
                return number !== nmb
            }
          }
        }
        

        为了清楚起见,仅使用字符串作为运算符,更好的解决方案可能是使用布尔值或数字值

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          • 1970-01-01
          • 1970-01-01
          • 2020-03-23
          • 2023-04-01
          • 2019-04-24
          • 2020-10-26
          相关资源
          最近更新 更多