gpt4 book ai didi

javascript - 使用模块模式的非立即执行变体的类似类的代码结构

转载 作者:行者123 更新时间:2023-11-28 01:46:47 25 4
gpt4 key购买 nike

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

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

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

据我所知,这似乎符合我的要求,但我还没有看到有人在网上使用它,我应该注意这种方法有什么缺点吗?

最佳答案

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

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

如果您不担心这些缺点,应该没问题。

关于javascript - 使用模块模式的非立即执行变体的类似类的代码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20197510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com