Code is available here to play with - http://jsfiddle.net/dsjbirch/zgweW/14/
This is basically a straight copy and paste of crockfords explanation of private variables.
I have added Object.create()
and a bit of tracing.
Why does the second object share the private members of the first? How do I avoid this situation but continue to use Object.create()
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
this.service = function () {
return dec() ? that.member : null;
};
}
var first = new Container("private");
var second = Object.create(first);
document.write(first.service() + "<br/>");
document.write(first.service() + "<br/>");
document.write(first.service() + "<br/>");
document.write(first.service() + "<br/>");
document.write(second.service() + "<br/>");
document.write(second.service() + "<br/>");
document.write(second.service() + "<br/>");
document.write(second.service() + "<br/>");
http://jsfiddle.net/dsjbirch/zgweW/14/
I would expect to see
private
private
private
null
private
private
private
null
But actuall the second object's output is all null.
private
private
private
null
null
null
null
null
I conclude second
is therefor sharing the first
object's secret
member.