我正在尝试了解有关如何在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
答案 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;
};
}