我已经熟悉模块模式,我们使用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")
据我所知,这似乎可以做我想要的但是我没有看到有人在网上使用这个,我应该注意这种方法的任何缺点吗?
答案 0 :(得分:1)
你没有使用原型继承;这是主要的区别。你的主要缺点是:
instanceof
来确保变量属于某种类型(因此您无法执行myVar instanceof MyPseudoClass
。您不会使用此方法创建实例;您只需创建一个对象。如果你不关心这些缺点,你应该没问题。