代码之家  ›  专栏  ›  技术社区  ›  Ross

静态变量jQuery插件;如何创建?

  •  5
  • Ross  · 技术社区  · 16 年前

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

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

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

    我希望“静态”是正确的术语。。。单个全局变量。如果错了,请改正。

    // 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];
    }
    

    1 回复  |  直到 16 年前
        1
  •  12
  •   Danny    16 年前

    如果您希望为您的库和您的库单独创建一个“全局”或静态变量,那么闭包就是一种方法。

    一个普通的全局函数是一件坏事,因为它会污染名称空间,而且您不知道谁将运行您的库。

    通过在匿名函数中定义静态变量,我们可以访问一个任何人都无法触及的变量,并且对于我们的函数来说,该变量实际上是“全局的”。如果我正确地理解了你要做的事情,这应该可以完成。

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

    编辑:

    这个 $cache

    在这里定义所有内容(AFAIK)的唯一替代方法是有一些访问器函数的组合,在这个闭包中定义一个简单的函数,其目的是提供外部函数对 $缓存 .

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