Private fields: using prototype, basic idea
by mbread
JavaScript
//***********************************
// Each class
//***********************************
var Class1 = (function () {
var private = null;
var Class1 = function () {
var _private = {};
this.loadPrivate = function () {
private = _private;
}
};
Class1.prototype.myField = function () {
this.loadPrivate();
try {
switch (arguments.length) {
case 0:
return private.myField;
case 1:
private.myField = arguments[0];
break;
}
} finally {
private = null;
}
}
return Class1;
}());
//***********************************
// Tests
//***********************************
function assertEquals(msg, expected, actual) {
if (expected == actual) {
console.debug("Passed: " + expected + " == " + actual);
} else {
console.error("Failed: " + msg + " Expected: " + expected + " Actual: " + actual);
}
}
console.info("----- Starting tests --------------------------------------------------------------------------"); {
var o1 = new Class1();
o1.myField("value");
assertEquals("myfield() with no args should return the argument passed to previous call", "value", o1.myField());
}
{
var o1 = new Class1();
assertEquals("myField() with one arg should return nothing", undefined, o1.myField("value"));
}
{
var o1 = new Class1();
o1.myField(1);
var o2 = new Class1();
o2.myField(2);
assertEquals("A first object should still return the same value even after a second object has had its value set", 1, o1.myField());
}
{
var fieldFound;
var o = new Class1();
o.myField("unique string 012345");
// See if we can find a field with a related name or with that value in the object
for (i in o) {
if (typeof o[i] == "function") continue;
if (i.indexOf("myField") != -1 || (typeof o[i] ==...