Javascript 使用模块模式的非立即执行变量的类式代码结构
我已经熟悉了模块模式,在该模式中,我们定义了一个具有私有状态的模块,其中包含functions闭包和一组公开的公共方法。然而,这似乎更接近于单个对象而不是对象 但是,如果我想要一个更面向对象的模式,我可以使用与模块模式相同的结构,但不立即执行,比如:Javascript 使用模块模式的非立即执行变量的类式代码结构,javascript,module-pattern,Javascript,Module Pattern,我已经熟悉了模块模式,在该模式中,我们定义了一个具有私有状态的模块,其中包含functions闭包和一组公开的公共方法。然而,这似乎更接近于单个对象而不是对象 但是,如果我想要一个更面向对象的模式,我可以使用与模块模式相同的结构,但不立即执行,比如: function MyPseudoClass(constructorArg0, constructorArg1... ) { var privateVar = "private!!"; var privateComplexVar
function MyPseudoClass(constructorArg0, constructorArg1... ) {
var privateVar = "private!!";
var privateComplexVar = constructorArg0;
var privateComplexVar1 = constructorArg1;
return {
publicVar: "public Varaible!",
publicMethod: function() {
//code
return privateVar + 1;
}
};
现在,在我的代码中,我可以创建伪类的实例,如下所示:
var instance = MyPseudoClass({p : 2, q : 100},"x")
var anotherInstance = MyPseudoClass({p : 3, q : 230},"y")
据我所知,这似乎是我想要的,但我还没有看到任何人在网上使用它,这种方法有什么缺点我应该知道吗?你没有使用原型继承;这是主要的区别。你的主要缺点是:
- 不能使用
来确保变量属于某种类型(因此不能使用instanceof
。不能使用此方法创建实例;只能创建对象myVar instanceof MyPseudoClass
- 基于原型的方法可能会更快,因为闭包会带来开销。此外,在原型方法中,每个实例将共享一个函数的相同实例(分配给原型)。但在闭包方法中,每个“实例”将有自己的函数副本。但是,差别很小(尤其是在较新的浏览器中)
如果您不担心这些缺点,您应该可以。您没有使用原型继承;这是主要区别。您的主要缺点是:
- 不能使用
来确保变量属于某种类型(因此不能使用instanceof
。不能使用此方法创建实例;只能创建对象myVar instanceof MyPseudoClass
- 基于原型的方法可能会更快,因为闭包会带来开销。此外,在原型方法中,每个实例将共享一个函数的相同实例(分配给原型)。但在闭包方法中,每个“实例”将有自己的函数副本。但是,差别很小(尤其是在较新的浏览器中)
如果您不担心这些缺点,您应该可以。您没有使用原型继承(您不需要),但一切都很好。您可以将其称为“工厂函数”而不是“构造函数”,您可以将其命名为
getPseudoInstance
。为什么要在publicMethod中递增私有字符串。此外,变量在PublicVar中拼写错误您没有使用原型继承(您不需要),但一切都很好。您可以将其称为“工厂函数”而不是“构造函数”,您可以将其命名为getPseudoInstance
。为什么要在publicMethod中递增私有字符串。此外,变量在publicVar中拼写错误