代碼可以在這裏玩 - http://jsfiddle.net/dsjbirch/zgweW/14/爲什麼Object.create使我的私有變量是靜態的?
這基本上是一個直接複製和粘貼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
成員。
+1 http://jsfiddle.net/ –
後,我感到困惑你的期望是什麼VS,你看到的調用構造函數在jsFiddle上。你能否提供一些你不明白的細節? –
-1爲jsfiddle.net(@Ashish Gupta)。爲什麼不在這裏粘貼代碼,以及結果? – Bergi