不,它不是静态的,因为它仍然具有
constructor指向您的“匿名”函数的属性。在您的示例中,您可以使用
var gameData2 = new (gameData.constructor)();
重新实例化第二个对象,因此“类”(实际上是实例)并不是真正的“静态”。基本上,您正在 泄漏 构造函数,可能 还会泄漏
与其绑定的数据。另外,确实会创建一个 无用的
原型对象(
gameData.constructor.prototype),并将其插入的原型链中
gameData,这不是您想要的。
相反,您可以使用
- 一个简单的对象文字)。这意味着您没有构造函数,没有闭包范围的私有变量(无论如何都没有使用过),也没有(自定义)原型。
- (显示)模块模式。在那里,您将具有IIFE来创建闭合范围的变量,并且可以返回任何类型的对象。
- 一个实际的构造函数(“类”),可以稍后(在需要时)实例化,并始终产生相同的单例对象。
这是单例模式的样子:
function GameData() { if (this.constructor.singleton) return this.constructor.singleton; else this.constructor.singleton = this; // init: // * private vars // * public properties // ...}GameData.prototype.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; }};var gameData = new GameData();var gameData2 = new GameData();gameData === gameData2 === GameData.singleton; // true但是,原型几乎没有用,因为您只有一个实例
GameData。继承只会变得有趣。



