使用Javascript对象字面量存储变量

Storing variables with Javascript Object Literals

本文关键字:存储 变量 Javascript 对象 使用      更新时间:2023-09-26

我正在使用Paul Irish的基于dom的路由模式(http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/)来组织我的代码。

我的问题是:我如何存储/回调变量,我想在整个网站使用这种方法?

通常我会这样做:

var $button = $('.button');
var $link = $('.link');

我如何将上面的变量存储集成到下面的模式中?

NS = {
   common : {
     init: function(){
       $button.doSomething();
      }
   },
   home : {
     init: function(){
        $link.doSomethingElse();
      }
   },
   utils : {
     init: function(){}
   }
}
UTIL = {
  fire : function(func,funcname, args){
  // indicate your obj literal namespace here
  var namespace = NS; 
  funcname = (funcname === undefined) ? 'init' : funcname;
    if (func !== '' && namespace[func] && typeof namespace[func][funcname] == 'function'){
      namespace[func][funcname](args);
    }
  },
  loadEvents : function(){
    // get body id
    var bodyId = document.body.id;
    var classNm = document.body.className;
    // fire up common
    UTIL.fire('utils');
    UTIL.fire('common');
    //fire up page specific js
    UTIL.fire(bodyId);
    UTIL.fire(bodyId,classNm);
  }
};
// kick it all off here 
$(document).ready(UTIL.loadEvents);

除非我遗漏了什么,否则您应该能够执行以下操作。

NS = {
    domElements: {
        $button: null,
        $link: null
    },
    common : {
        init: function(){
            if (NS.domElements.$button === null) {
                NS.domElements.$button = $('.button');
            }
            var $button = NS.domElements.$button;
            $button.doSomething();
        }
    },
    home : {
        init: function(){
            if (NS.domElements.$link === null) {
                NS.domElements.$link = $('.link');
            }
            var $link = NS.domElements.$link;
            $link.doSomethingElse();
        }
    },
    utils : {
        init: function(){}
    }
}