微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Javascript 链接方法 - 加减号问题

如何解决使用 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 但我只输入了打印的最后一个数字。我该如何解决

解决方法

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()",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()",minus(3).minus(3).value());

,

如果没有 constructorclass-糖,您可以使用加法/减法方法中的封闭值返回对象。类似的东西:

const { plus,val,reset } = PM();

console.log(plus().plus(3).minus(4).plus(25).plus(4).trace());
console.log(reset().minus(2).plus(33).val());

function PM() {
  let values = [];
  let traced = [];
  const reset = () => {
      values = [];
      traced = [];
      return ret;
  };
  const add = value => {
    const calc = +(values[values.length-1] || 0) + value; 
    traced.push(`${values[values.length-1] || 0}${
      !value || value >= 0 ? "+" : ""}${value || 0}=${calc || 0}`);
    values.push(calc || 0);
    return ret;
  };
  const ret = {
    plus: value => add(value),minus: value => add(-value),val: () => values,trace: () => traced,reset,};
  return ret;
}

或者结合这个with an embedded constructor

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。