【发布时间】:2009-10-23 10:39:58
【问题描述】:
我很抱歉把它从这里移走 有一些混乱,感谢 格雷为回答这个实现了 错误。话题已移至 Javascript: Behavior of {} 进一步讨论。
带有“{}”的单例模式。这是怎么回事:
var A = {
B : 0
};
// A is an object?
document.write("A is an " + typeof A);
让我们尝试克隆对象A
var objectOfA = new Object(A);
objectOfA.B = 1;
//Such operation is not allowed!
//var objectOfA = new A();
var referenceOfA = A;
referenceOfA.B = -1;
document.write("A.B: " + A.B);
document.write("<br/>");
上面的referenceOfA.B 持有对象A 的引用,因此更改referenceOfA.B 的值肯定会反映在A.B 中。
document.write("referenceOfA.B: " + referenceOfA.B);
document.write("<br/>");
如果成功克隆,那么objectOfA 应该保持值1
document.write("objectOfA.B: " + objectOfA.B);
document.write("<br/>");
结果如下:
A 是一个对象
A.B:-1
referenceOfA.B: -1
objectOfA.B: -1
到这里一切都清楚了,但是一个对象应该使用instanceof。但是在这里,如果您尝试将instanceof 与A 一起使用,则会出现异常。
为什么?
【问题讨论】:
-
意识到我完全误解了。
-
在具有全局变量的语言中,“单例模式”的意义何在?我问的是真的,为什么不直接说
var B=0? -
全局变量可以用闭包来控制。一个非常强大的功能。这里有一篇关于闭包概念的精彩文章:jibbering.com/faq/faq_notes/closures.html
标签: javascript unobtrusive-javascript