JS单例模式的一种应用
来自 segmentfault 的问答,关于js构造函数的返回值的问题的讨论。
示例代码:
1 | function Universe() { |
问题:
两次new出来的实例为什么是相等的???
代码解析:
正常情况下,通过 new
运算符产生的实例对象是不同的。比如:
1 | function Bar (name, color) { |
该示例中的构造函数中,在最后重写了构造函数,并返回了 this
所指向的对象。在 Javascript 中的构造函数中,使用 new 关键字调用的情况下,如果未显示的返回一个对象,则默认返回 this 指向的对象。也就是说未显示返回一个对象的情况下,this默认指向新创建的实例对象。否则,新创建的实例对象等于显示返回的对象。然而在本例中第一次通过 new 调用该构造函数后,重写后的构造函数中返回了上一次的this 对象,也就是之后的new出来的实例对象都会指向第一次的实例对象。因此之后的实例对象都是相等。
问题来源:
参考链接: