【问题标题】:Singleton Pattern with {}?带有 {} 的单例模式?
【发布时间】: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。但是在这里,如果您尝试将instanceofA 一起使用,则会出现异常。

为什么?

【问题讨论】:

  • 意识到我完全误解了。
  • 在具有全局变量的语言中,“单例模式”的意义何在?我问的是真的,为什么不直接说var B=0
  • 全局变量可以用闭包来控制。一个非常强大的功能。这里有一篇关于闭包概念的精彩文章:jibbering.com/faq/faq_notes/closures.html

标签: javascript unobtrusive-javascript


【解决方案1】:

我没有遇到异常:

alert(A instanceof Object); // true

在 Chrome、IE8 和 Firefox 中测试。

【讨论】:

  • 我很累referenceOfA instanceof A,在那里引发了异常。 referenceOfA instanceof Object 但返回 true。
猜你喜欢
  • 1970-01-01
  • 2014-08-08
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多