2010-03-10 30 views
5

为jQuery插件创建静态变量的最佳方式是什么?静态变量一个jQuery插件;如何创建?

我有2个示例用例来说明我目前的想法;每个人都有一些想法。
任何其他的想法当然欢迎...

一个例子是为一个静态变量包含:动画设置,布局设置,产品详细信息等;另一个用于静态变量缓存数据。

我希望'静态'是在这里的正确terminolgy ...单一全局。如果错误请纠正。

案例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库,开始正确的轨道...

回答

11

如果你正在寻找一个“全局”或静态变量为你的图书馆和你的图书馆,封闭是方式走。

一个普通的全局是一件坏事,因为它污染了命名空间,而且你不知道谁将运行你的库。

通过在匿名函数中定义静态变量,我们让自己访问一个变量,任何人都无法触及并且对我们的函数来说是有效的“全局”变量。如果我正确理解你正在尝试做什么,这应该完成它。

(function($){ 
    var $cache = {}; 

    jQuery.fn.myPlugin = function (newObject) { 
     if(!$cache[newObject]) 
     $cache[newObject] = $(newObject); 

     return $cache[newObject]; 
    } 

})(jQuery); 

编辑:

$cache变量,就只有这个匿名函数中定义的函数访问。所以如果其他函数需要访问这个文件,它们也必须在这个匿名函数中定义。

在这里定义所有东西(AFAIK)的唯一选择是存取函数的一些组合,在这个闭包中定义一个简单的函数,其目的是提供外部函数访问$cache

最好,我会去定义这个闭包内的必要函数。但是,这最终是一个实施细节,并且由您自行决定。

+1

ps,有一个“插件开发”部分@ http://docs.jquery。com/Tutorials,如果你想阅读更多:-) – Seaux 2010-03-10 20:18:39

+0

这是很好的〜一个问题:我在别处使用这种技术创建另一个插件。它包裹在上面推荐的匿名函数中。它会访问$缓存吗?或者插件的函数是否需要包含在同一个匿名函数中?去测试... – Ross 2010-03-10 20:34:25

+0

@Danny感谢您的编辑。辉煌。如果只有可能,再次+1。 – Ross 2010-03-11 14:16:52

相关问题