JS 链接函数

JS chaining functions

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

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) 正常工作。

您可以添加另一个布尔值 属性 以根据其值更改 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

我想我会让not函数控制运算符,比如

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
    }
  }
}

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

也许是这样的:

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

看来能满足你的要求。希望对你有帮助

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;
    }
  }
}

what should not() do so as to make checker(num) work as it is supposed to.

不能 return 一个新的检查器。