从方法链的末尾获得不同的输出

时间:2018-12-18 21:30:56

标签: javascript method-chaining

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

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

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

1 个答案:

答案 0 :(得分:2)

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

为什么不呢?

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