Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:使用“引用变量”;“模块模式”;,有什么想法吗?_Javascript_Oop - Fatal编程技术网

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

Javascript:使用“引用变量”;“模块模式”;,有什么想法吗?,javascript,oop,Javascript,Oop,好的,我有一个叫做“选择器模块”的模块。在其中,我有一个对象文本,它将包含应用程序中在各种用户交互期间使用的所有jQuery选择器(见下文) 为了避免每次使用选择器时重复相同的$(选择器)代码,我认为将所有共享选择器元素放置到其自己的“SelectorModule”中会更有效。这样,如果需要进行任何更改,只需在一个地方进行修改,所有内容都仍然可以工作。然后还可以从单个位置调用每个选择器,例如“SelectorModule.getSelectors.selectorTwo” var Selecto

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

为了避免每次使用选择器时重复相同的$(选择器)代码,我认为将所有共享选择器元素放置到其自己的“SelectorModule”中会更有效。这样,如果需要进行任何更改,只需在一个地方进行修改,所有内容都仍然可以工作。然后还可以从单个位置调用每个选择器,例如“SelectorModule.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;
        }
    };

})();
我的问题是:

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

  • 我目前的方法是错误的、有缺陷的、好的、好的、完美的还是恰到好处的

  • 1) 您使用最初创建的模块的同一实例

    2) 每次你打电话来,我都觉得很好

     SelectorsModule.getSelectors().selectorOne // note the parentheses for invocation
    
    您正在访问代码首次运行时创建的同一个单例对象

    (2) 我想说这没关系,但我有两个顾虑:

    (a) 这些选择器是否属于一个单独的对象,或者某些选择器适用于某些对象/行为片段,而其他选择器适用于其他区域?这纯粹是观点,但它们可能更好地封装在作用于它们的对象中

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


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

    谢谢!这就是我需要知道的一切:-)