gpt4 book ai didi

javascript - 模块模式的技巧

转载 作者:行者123 更新时间:2023-12-03 12:27:05 25 4
gpt4 key购买 nike

我有一些关于使用模块模式进行 JavaScript 编程的问题。我看过有关该模式的指南,以两种不同的方式利用它。第一个是这样的:

这个方法来自CSS Tricks, Module Pattern

var s,
NewsWidget = {

settings: {
numArticles: 5,
articleList: $("#article-list"),
moreButton: $("#more-button")
},

init: function() {
// kick things off
s = this.settings;
}

};

第二种方法,我将使用相同的代码,但方式不同。

var s,
NewsWidget = (function(){

// Any variables or functions in here are private
var privateVar;


// All variables or functions in returned object become public
return {

settings: {
numArticles: 5,
articleList: $("#article-list"),
moreButton: $("#more-button")
},

init: function() {
// kick things off
s = this.settings;
}

}


}());

现在看看这两个例子,我的假设是只使用后一种方法,因为由于闭包而能够使用私有(private)变量..?我对么?第一个方法不使用闭包,因此位于全局内存范围内,并且不能具有私有(private)成员。那么为什么 CSS Tricks 和其他人使用第一种方法作为示例,而它似乎没有任何实际目的呢?

其次,我很好奇模块模式如何处理同一类型的多个对象?与用于获取任意数量的 JavaScript 对象的工厂模式不同,模块模式仅执行一次匿名函数,因此,如果我有一个名为 BlogPost 的模块,它定义了博客文章的所有属性,那么我如何创建多个实例这个对象?

最佳答案

my assumption would be to only use the latter method because of the ability to use private variables due to closures..? Am I correct?

是的。如果您需要私有(private)变量。

The first method does not use a closure and therefore is in the global memory scope and cannot have private members.

但请注意,即使在第二个示例中,s 变量也不一定是全局变量。

Why is it then, that CSS Tricks and other people use the first method as an example when it does not seem to have any real purpose?

为了简单起见。当您没有局部变量时(因为您不需要它们,或者您确实将私有(private)事物建模为属性),或者当作者不在乎时。或者懒得写下隐含的IEFE .

Secondly, I am curious how the Module Pattern handles multiple objects of the same type?

事实并非如此。模块是单例的。不过,当您需要实例化与模块相关的对象时,它们可以将构造函数或工厂作为字段。尽管如此,只有一个(全局)模块对象。

关于javascript - 模块模式的技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24146919/

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