【问题标题】:Pass one object result to another object function like chain将一个对象结果传递给另一个对象函数,如链
【发布时间】:2017-06-03 20:00:17
【问题描述】:

我有一个简单的对象计算函数。我将对象结果数据传递给另一个对象函数,如链式反应

例如:

str.replace().replace().replace() 他们会将第一次替换的结果数据传递给第二次替换,就像链式反应一样。

所以我想创建下面的代码。但在我的情况下不起作用。

见下文sn-p

var m=function(data){
  return {
       str :data,
       plus:function(b){
            this.str = this.str+b;
           return this.str;
         },
      min:function(a){
            this.str = this.str-a
            return this.str;
         }
    }
  }

console.log(m(5).plus(1).min(3))

如果5加上16。然后将6传递给min()函数以减少3。最后console.log结果3。但是这里有一些。请帮助解决我的问题。

谢谢

【问题讨论】:

    标签: javascript object math return


    【解决方案1】:

    我建议使用一个对象并在方法调用后返回该对象。为了更好的使用,可以实现toStringvalueOf方法直接使用返回值。

    你需要的是返回整个对象,对于所有可链接的方法。

    var m = function(value){
        var obj = {
                value: value,
                plus: function (b) {
                    obj.value += b;
                    return obj;
                },
                min: function(a) {
                    obj.value -= a;
                    return obj;
                },
                toString: function () { return obj.value; },
                valueOf: function () { return obj.value; }
            }
            return obj;
        }
    
    console.log(m(5).plus(1).min(3).value);
    alert(m(5).plus(1).min(3));
    console.log(m(3).plus(7) - m(5).min(1));

    【讨论】:

    • 没关系。但它不像str.replace().replace()。它没有任何扩展名(it means min(3).value[value] )。如果有任何其他方式来创建这样的或不可能的? .
    • 是的,例如,您可以使用新原型扩展 String,例如返回更改了某些内容的字符串,例如 replace
    • value[value] 是什么意思?
    • 我不需要 value 在函数的末尾 console.log(m(5).plus(1).min(3).value); 我只需要 console.log(m(5).plus(1).min(3));
    • 请查看alert。它返回值而不调用 value 属性。它改为调用 toString 方法。
    【解决方案2】:

    var m=function(data){
      return {
           str :data,
           plus:function(b){
                this.str = this.str+b;
               return this;
             },
          min:function(a){
                this.str = this.str-a
                return this;
             }
        }
      }
    
    console.log(m(5).plus(1).min(3).str)

    要创建类似链的方法调用,您需要从函数中返回“this”,之后您希望链继续

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2017-12-20
      相关资源
      最近更新 更多