Javascript:使用"模块模式"引用变量,有什么想法吗?

Javascript: Referencing variables using "Module Pattern", any ideas?

本文关键字:quot 什么 引用 使用 模块 模式 Javascript 变量      更新时间:2023-09-26

好的,我有一个名为"SelectorsModule"的模块。在其中,我有一个对象文字,它将包含所有的jQuery选择器,将在各种用户交互期间在应用程序中使用(见下文)

为了防止每次使用选择器时重复相同的$(selector)代码,我认为将所有共享的选择器元素放入自己的'SelectorsModule'中会更有效。这样,如果需要进行任何更改,只需要在一个地方进行修改,所有内容仍然可以正常工作。每个选择器也可以从一个地方调用。"SelectorsModule.getSelectors。例如,selectorTwo"

var SelectorsModule = SelectorsModule || {};
SelectorsModule = (function(){
    // Private methods and variables
    var sharedSelectors = {
        selectorOne:            $("#element-one"),
        selectorTwo:            $("#element-two"),
        selectorThree:          $("#element-three"),
        selectorFour:           $("#element-four")
    };
    // Public methods and variables
    return{
        getSelectors: function(){
            return sharedSelectors;
        }
    };
})();

我的问题:

  1. 每次我使用SelectorsModule.getSelectors.selectorOne在我的代码现在(获得jQuery选择器对象),我只是引用SelectorsModule的单个实例,创建时脚本第一次运行,或者是一个新的SelectorsModule '对象',每次在幕后创建?后者显然会表现得更差,只是需要一些澄清,真的吗?

  2. 我目前的方法是错误的、有缺陷的、还好、很好、完全好还是完全正确?

1)使用最初创建的模块的相同实例。

(1)每次打电话

 SelectorsModule.getSelectors().selectorOne // note the parentheses for invocation

您正在访问您在代码第一次运行时创建的同一个单例对象。

(2)我想说这是可以的,但我有两个问题:

(a)这些选择器是否属于一个单独的对象,还是一些适用于某些对象/行为片段,而另一些适用于其他区域?这纯粹是个人意见,但最好将它们封装在作用于它们的对象中。

(b)记住,jQuery函数只在每个选择器实例化SelectorsModule时被调用一次。这意味着,如果你要在实例化模块后修改DOM,任何更改都不会反映在模块属性返回的jQuery对象中。

最后,作为旁注,在属性名称中使用术语"选择器"会有点令人困惑(尽管我怀疑这只是出于问题的目的)。传递给jQuery函数的字符串是一个"选择器",但是每个属性本身都包含"一个jQuery对象",严格来说并不是一个选择器。