我应该以这种方式创建私有变量/方法吗?

时间:2014-06-12 14:19:48

标签: javascript closures private public modifier

我正在尝试了解有关如何在JavaScript中创建私有变量和方法的更多信息。下面的代码似乎工作,但我觉得可能有一个更有效的方法来做到这一点。有什么建议吗?

var CountObject = (function () {

function countObject() {
    // private variables
    var _a = 1;
    var _b = 2;
    var _c = _a + _b;

    // private method
    addTo = function (num) {
        _c = _c + _a + _b + num;
        return _c;
    }
}

// public method
countObject.prototype.add = function (num) {
    return addTo(num);
};

return countObject;
}());

var testObject1 = new CountObject();

console.log(testObject1.add(1));
//output 7

console.log(testObject1.add(1));
//output 11

console.log(testObject1.add(1));
//output 15

var testObject2 = new CountObject();

console.log("testobject2:" + testObject2.add(100));
//output testobject2:106

1 个答案:

答案 0 :(得分:0)

addTo不是私有(本地)方法,而是global (not even instance-specific) function!在创建testObject1.add(0)之后再次尝试testObject2,您将看到它失败。

您无法从原型中调用本地(构造函数范围)函数,因此这似乎毫无意义。通过使用特定于实例的特权(可访问局部变量)方法修复它:

function CountObject() {
    // private variables
    var a = 1;
    var b = 2;
    var c = a + b;

    // public method
    this.add = function (num) {
        c = c + a + b + num;
        return c;
    };
}