JavaScript函数使用Singleton模式链接



我有一小部分代码。

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需要返回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

最新更新