为jQuery插件创建静态变量的最佳方法是什么?
到目前为止,我有两个示例用例来说明我的想法;各有一些想法。
当然欢迎任何其他想法...
一个例子是静态变量,包含:动画设置,布局设置,产品细节等;另一个用于静态变量缓存数据。
我希望'static'是正确的终结点......单个全局变量。如果错误请更正。
案例1:设置
// defining globally
var anObject = {
value1 = 0;
value2 = 0;
}
jQuery.anObjectSet(partialObject) {
anObject = jQuery.extend(anObject, partialObject);
}
jQuery.fn.myPlugin = function (partialObject) {
obj = jQuery.extend(anObject, partialObject);
}
或者也许?
// adding to the jQuery object
jQuery.anObject = {
value1 = 0;
value2 = 0;
}
jQuery.anObjectSet(partialObject) {
jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject);
}
jQuery.fn.myPlugin = function (partialObject) {
obj = jQuery.extend(jQuery.anObject, partialObject);
}
或者也许?
jQuery.anObjectSet(partialObject) {
if(!jQuery.anObject)
jQuery.anObject = {
value1 = 0;
value2 = 0;
}
jQuery.anObject = jQuery.extend(jQuery.anObject, partialObject);
}
jQuery.fn.myPlugin = function (partialObject) {
if(!jQuery.anObject)
jQuery.anObject = {
value1 = 0;
value2 = 0;
}
obj = jQuery.extend(jQuery.anObject, partialObject);
}
案例2:缓存
jQuery.fn.myPlugin = function (newObject) {
if(!cache[newObject])
cache[newObject] = $(newObject);
return cache[newObject];
}
或许? (我在其他地方看过这种方法)
window.$cache = {};
jQuery.fn.myPlugin = function (newObject) {
if(!$cache[newObject])
$cache[newObject] = $(newObject);
return $cache[newObject];
}
感谢。我想建立一个.js库,开始正确的轨道......
答案 0 :(得分:12)
如果您希望仅为库和库创建一个“全局”或静态变量,那么关闭是可行的方法。
普通的全局是一件坏事,因为它会污染命名空间,而你却不知道谁将会运行你的库。
通过在匿名函数中定义静态变量,我们可以自己访问一个无人能够触及的变量,并且对于我们的函数而言,它实际上是“全局的”。如果我正确理解你要做的事情,那就应该完成它。
(function($){
var $cache = {};
jQuery.fn.myPlugin = function (newObject) {
if(!$cache[newObject])
$cache[newObject] = $(newObject);
return $cache[newObject];
}
})(jQuery);
修改强>
$cache
变量只能在此匿名函数中定义的函数中访问。因此,如果其他函数需要访问此文件,则还必须在此匿名函数中定义它们。
在这里定义所有内容(AFAIK)的唯一选择是使用一些访问器函数,一个在此闭包内定义的简单函数,其目的是为外部函数提供对$cache
的访问。
最好,我会在这个闭包中定义必要的函数。然而,这最终是一个实施细节,由您自行决定。