将数据存储为函数的属性

时间:2014-08-13 09:15:57

标签: javascript

我正在尝试理解如何将数据作为函数变量分配到javascript上。

我创建了fn()foo,并分配了一个属性foo.bar = {},用于测试缓存的请求。这很好用!

与此同时,我创建了一个使用原型的示例,我用它来测试和证明这个概念(http://jsbin.com/vowux/2/)。在这里,如果我们在没有'new'关键字的情况下尝试它,原型将无效。

我想知道在哪里可以找到有关将数据存储为函数属性的更多信息,或者获取有关其工作原理的更多信息?

function hasCache( param ) {

  var results;

  if ( hasCache.cache[param] ) {

    console.log('-> Cached:');
    results = hasCache.cache[param];

  } else {

    console.log('-> Not Cached:');
    results = param;
    hasCache.cache[param] = results;

  }

  return results;

}

hasCache.cache = {};

console.log( hasCache("foo") );
console.log( hasCache("foo") );

此处提供实时示例http://jsbin.com/vowux/1/

感谢您的期待!

1 个答案:

答案 0 :(得分:0)

您需要的是IIFE

不是将缓存作为函数的参数,而是在任何地方都可用,甚至在函数之外。

使用IIFE可以让您拥有一个保存缓存的“私有”变量。对于isntance:

var hasCache = (function() {

    var cache = {};

    return function(cacheKey) {
        if ( !cache.hasOwnProperty(cacheKey) ) {
            cache[cacheKey] = cacheKey;
        }
        return cache[cacheKey];
    }

})();

我还冒昧地折射你的代码。你有一些奇怪的事情发生在那里。