JavaScript 使用单例模式的函数链接

JavaScript function chaining using the singleton pattern

我有一小段代码如下所示。

var MY = MY || {};

MY.Farm = (function () {

    var add = function(x){
        console.log(x)
        return this + this;
    };

    return {
        add: function(x){
            return add(x);
        }

    }
});

在一个单独的文件上,我创建了 sheep MY.Farm

的一个实例
var sheep = new MY.Farm()

我希望能够像下面这样调用带有输出的函数 6

sheep.add(3).add(2).add(1)

有什么办法可以实现吗? MY.Farm 代码段需要做哪些更改才能适应这种情况?

提前致谢。

像这样

var MY = MY || {};

MY.Farm = (function () {
    var x=0;
    return {
        add: function(newX){
            if(typeof(newX) !="undefined") {
                x+=newX;
                return this;
            }
            return x;
       }
    }
});

var sheep = MY.Farm();
console.log( sheep.add(2).add(4).add());

http://jsfiddle.net/7q0143er/

你离得不远了。诀窍是您需要在某处跟踪值,例如在私有变量中,并且 add 需要 return this。最后,您需要一种在完成后获取值的方法:

MY.Farm = function () {
    var total = 0;

    return {
        add: function(x) {
          total += x;
          return this;
        },

        value: function() {
          return total;
        }
    };
};

var sheep = new MY.Farm();

sheep.add(3);
console.log(sheep.value()); // => 3

console.log(sheep.add(1).add(2).value()); // => 6