类似于使用非紧接执行的模块模式变体的代码结构的类

时间:2013-11-25 16:00:18

标签: javascript module-pattern

我已经熟悉模块模式,我们使用funcitons闭包和一组公开的公共方法来定义具有私有状态的模块。然而,这似乎更接近单身而不是对象。

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

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")

据我所知,这似乎可以做我想要的但是我没有看到有人在网上使用这个,我应该注意这种方法的任何缺点吗?

1 个答案:

答案 0 :(得分:1)

你没有使用原型继承;这是主要的区别。你的主要缺点是:

  • 您无法使用instanceof来确保变量属于某种类型(因此您无法执行myVar instanceof MyPseudoClass。您不会使用此方法创建实例;您只需创建一个对象。
  • 基于原型的方法可能会更快,因为与闭包相关的开销。此外,在原型方法中,每个实例将共享可以共享相同的函数实例(分配给原型)。但是在闭包方法中,每个“实例”都有自己的函数副本。但是,差异很小(特别是在较新的浏览器中)。

如果你不关心这些缺点,你应该没问题。