Javascript:使用"模块模式"引用变量,有什么想法吗?
Javascript: Referencing variables using "Module Pattern", any ideas?
好的,我有一个名为"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;
}
};
})();
我的问题:
每次我使用
SelectorsModule.getSelectors.selectorOne
在我的代码现在(获得jQuery选择器对象),我只是引用SelectorsModule
的单个实例,创建时脚本第一次运行,或者是一个新的SelectorsModule
'对象',每次在幕后创建?后者显然会表现得更差,只是需要一些澄清,真的吗?我目前的方法是错误的、有缺陷的、还好、很好、完全好还是完全正确?
1)使用最初创建的模块的相同实例。
(1)每次打电话
SelectorsModule.getSelectors().selectorOne // note the parentheses for invocation
您正在访问您在代码第一次运行时创建的同一个单例对象。
(2)我想说这是可以的,但我有两个问题:
(a)这些选择器是否属于一个单独的对象,还是一些适用于某些对象/行为片段,而另一些适用于其他区域?这纯粹是个人意见,但最好将它们封装在作用于它们的对象中。
(b)记住,jQuery函数只在每个选择器实例化SelectorsModule时被调用一次。这意味着,如果你要在实例化模块后修改DOM,任何更改都不会反映在模块属性返回的jQuery对象中。
最后,作为旁注,在属性名称中使用术语"选择器"会有点令人困惑(尽管我怀疑这只是出于问题的目的)。传递给jQuery函数的字符串是一个"选择器",但是每个属性本身都包含"一个jQuery对象",严格来说并不是一个选择器。
- 什么是"!函数(){}〃;javascript中的mean/do
- 什么是==+"在javascript中
- 什么是“;回归"javascript中的mean
- "image/png;base64"它做什么
- 什么是“=*"AngularJS中
- 什么's二“"javascript中的mean
- jQuery"return{foo:bar,foo2:bar2}"-它是什么
- 什么是“-[1;平均值;if(!-[1,]&&!window.XMLHttpRequest)"
- 这条线是什么意思"this.parentNode.firstChild.nodeName”;在jQuery H
- 这个Javascript出了什么问题"Internet Explorer无法打开Internet站点-操作中止
- 什么是“@"ecmascript 6中的字符平均值
- 什么是“;php://input"意思是
- 用于删除两个“”之间的字符的正则表达式是什么/"在javascript中
- 什么's是“”的parentNode<tr>"
- 这个符号是什么//@"在Javascript中
- "“聪明”;HTML中的溢出:有什么方法可以放省略号“"结尾有一个链接,可以查看整个内容
- 什么是“@"以及“="angularJS范围内的平均值
- 检查字符串是否只包含“0”-"什么都没有
- 什么是“>>="操作人员
- 什么's的函数|"(管道)操作员