静态变量一个jQuery插件; 怎么创造?

为jQuery插件创建静态变量的最佳方法是什么?

到目前为止,我有两个示例用例来说明我的想法; 每个人都有一些想法。
当然欢迎任何其他想法……

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

我希望’静态’是正确的终结点……单个全局变量。 如果错了请更正。

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

如果您希望仅为库和库创建一个“全局”或静态变量,那么关闭就是最佳选择。

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

通过在匿名函数中定义静态变量,我们可以自己访问一个没有人可以触及的变量,并且为了我们的函数,它实际上是“全局的”。 如果我理解你正在尝试做什么,这应该完成它。

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

编辑:

$cache变量只能在此匿名函数中定义的函数中访问。 因此,如果其他函数需要访问此文件,则还必须在此匿名函数中定义它们。

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

我最好在这个闭包中定义必要的函数。 然而,这最终是一个实施细节,由您自行决定。