Javascript 使用模块模式的非立即执行变量的类式代码结构

Javascript 使用模块模式的非立即执行变量的类式代码结构,javascript,module-pattern,Javascript,Module Pattern,我已经熟悉了模块模式,在该模式中,我们定义了一个具有私有状态的模块,其中包含functions闭包和一组公开的公共方法。然而,这似乎更接近于单个对象而不是对象 但是,如果我想要一个更面向对象的模式,我可以使用与模块模式相同的结构,但不立即执行,比如: function MyPseudoClass(constructorArg0, constructorArg1... ) { var privateVar = "private!!"; var privateComplexVar

我已经熟悉了模块模式,在该模式中,我们定义了一个具有私有状态的模块,其中包含functions闭包和一组公开的公共方法。然而,这似乎更接近于单个对象而不是对象

但是,如果我想要一个更面向对象的模式,我可以使用与模块模式相同的结构,但不立即执行,比如:

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中拼写错误