代码可在此处使用 - http://jsfiddle.net/dsjbirch/zgweW/14/
这基本上是对私有变量的 crockfords 解释的直接复制和粘贴。
我已经添加Object.create()
了一些跟踪。
为什么第二个对象共享第一个对象的私有成员?如何避免这种情况但继续使用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/
我希望看到
private
private
private
null
private
private
private
null
但实际上第二个对象的输出都是空的。
private
private
private
null
null
null
null
null
我的结论second
是因此共享first
对象的secret
成员。