好的,所以我有一个名为" SelectorsModule"的模块。在其中,我有一个对象文字,它将包含将在各种用户交互期间在应用程序中使用的所有jQuery选择器(见下文)
为了在每次使用选择器时停止重复相同的$(选择器)代码,我认为将所有共享选择器元素放入其自己的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;
}
};
})();
我的问题:
每次我在代码中使用SelectorsModule.getSelectors.selectorOne
(获取jQuery选择器对象)时,我只是引用首次运行脚本时创建的SelectorsModule
的单个实例,或者是每次在幕后创建的新SelectorsModule
'对象?后者显然会表现得更糟,真的需要澄清吗?
我目前的做法是错误的,匆匆的,好的,好的,完美的还是很好的?
答案 0 :(得分:1)
1)您使用最初创建的模块的相同实例。
2)对我来说似乎完全没问题。
答案 1 :(得分:0)
(1)每次致电
SelectorsModule.getSelectors().selectorOne // note the parentheses for invocation
您正在访问代码首次运行时创建的同一单例对象。
(2)我会说没关系,但我会有两个问题:
(a)这些选择器是否属于一个单独的对象,或者某些对象/行为和其他行为适用于其他区域?这纯粹是意见,但它们可能更好地封装在作用于它们的对象中。
(b)请记住,在实例化SelectorsModule时,jQuery函数只会为每个选择器调用一次。这意味着,如果您在实例化模块后修改DOM,则任何更改都不会反映在模块属性返回的jQuery对象中。
最后,作为旁注,在属性名称中使用术语“选择器”会有点混乱(尽管我怀疑这只是出于问题的目的)。传递给jQuery函数的字符串是一个'selector',但属性本身每个都包含'一个jQuery对象',而不是严格意义上的选择器。