我只是想更深入地了解Javascript。
我创建了一个“类” gameData,只希望其中之一,不需要构造函数,也无需实例化。
gameData
所以我就这样创造了它…
var gameData = new function () { //May need this later this.init = function () { }; this.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; }
意识到’new’关键字不允许实例化并使它像静态类一样可用,将使用C#。
我是否正确地考虑了这一点?为静态?
不,它不是静态的,因为它仍然具有constructor指向您的“匿名”函数的属性。在您的示例中,您可以使用
constructor
var gameData2 = new (gameData.constructor)();
重新实例化第二个对象,因此“类”(实际上是实例)并不是真正的“静态”。基本上,您正在 泄漏 构造函数,可能 还会泄漏 与其绑定的数据。另外,确实会创建一个 无用的 原型对象(gameData.constructor.prototype),并将其插入的原型链中gameData,这不是您想要的。
gameData.constructor.prototype
相反,您可以使用
这是单例模式的样子:
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。继承只会变得有趣。
GameData