首页 > 解决方案 > 使用 Javascript 进行方法链接 - 加减问题

问题描述

我遇到了一个代码挑战,它使用方法链接创建了一个加减函数。plus(3).minus(2).value()我已经创建了如下代码,但是当涉及到输出渲染和minus(3).minus(3).value()调用方法时,它最终失败了

代码如下

function plus(valuez)
    {
      this.valuez = this.valuez+ valuez;
        function value{
            return  valuez
        }
      
        plus.minus = minus;
          plus.value = value;
         plus.plus = this;

        return this;
    }


  function minus(valuez)
    {
       this.valuez = this.v+ valuez;
        function value(){
            return  valuez
        }
        minus.plus = plus;
        minus.minus = this
        minus.value = value;

        return this;
    }

预期的输出是 1 和 6,但我只得到最后输入的打印数字。我该如何解决这个问题?

标签: javascriptmethodschaining

解决方案


class Box {
  constructor(v) { this._value = v }
  plus(v) { this._value += v; return this; }
  minus(v) { this._value -= v; return this; }
  value() { return this._value; } 
}
function plus(v) { return new Box(v) }
function minus(v) { return new Box(-v) }

console.log("plus(3).minus(2).value()", plus(3).minus(2).value());
console.log("minus(3).minus(3).value()", minus(3).minus(3).value());
 


function plus (x) { return { _value: x, plus(y){ return plus(this._value+y) }, minus(y){ return plus(this._value-y) }, value(){ return this._value } } }
function minus(x) { return plus(-x) }
console.log("plus(3).minus(2).value()", plus(3).minus(2).value());
console.log("minus(3).minus(3).value()", minus(3).minus(3).value());


使用闭包

function plus (x) { return { plus(y){ return plus(x+y) }, minus(y){ return plus(x-y) }, value(){ return x } } }
function minus(x) { return plus(-x) }
console.log("plus(3).minus(2).value()", plus(3).minus(2).value());
console.log("minus(3).minus(3).value()", minus(3).minus(3).value());


推荐阅读