首页 > 解决方案 > 从方法链的末尾获取不同的输出

问题描述

如果我有一个看起来像这样的方法链:

object.value.add(1).multiply(2);

对象是这样的:

var object = {
    "value":1,
    "add":function(x){
        this.value = this.value + x;
        return this;
    },
    "multiply":function(x){
        this.value = this.value * x;
        return this;
    }
}

这将输出:

{
    "value":4,
    "add":function(x){
        this.value = this.value + x;
        return this;
    },
    "multiply":function(x){
        this.value = this.value * x;
        return this;
    }
}

但我希望它输出:

4

这可能吗?而且我不想为输出创建另一种方法,如果它不是方法链中的最后一个,我希望“乘法”方法(和“加法”方法)将整个对象相乘(这样方法链是可能的),但是当它是最后一次时,我希望它输出“值”属性。

标签: javascriptmethod-chaining

解决方案


没有有效的方法(甚至可能没有方法)让该方法知道它是否是链的最后一个成员。

为什么不是这个?

object.add(1).multiply(2).value

您也可以valueOf在非常具体的场景中加以利用,但不能将其用作为此目的的通用策略。

var object = {
    "value":1,
    "add":function(x){
        this.value = this.value + x;
        return this;
    },
    "multiply":function(x){
        this.value = this.value * x;
        return this;
    },
    valueOf: function () { return this.value; }
};

console.log(object.add(4).multiply(2) / 2); //5


推荐阅读