我有个问题。我们都知道Java语言中闭包的功能,我想使用这种功能。可以说我有一个名为“ BRB”的对象。我想要的是,每当用户第一次调用方法getBrowser()时,它将查找浏览器的版本/名称,然后将其返回,并在第二次调用getBrowser()时应将其静态存储在其自身中,第二次返回该值无需计算的值,因为它已经静态存储在某个位置。这可以通过许多不同的方式完成,我们可以将属性存储在对象中,并且在第一个调用中可以为其设置一些值并在以后使用它,我们可以在使用以下语法创建对象时直接运行getBrowser方法:

(function()(
...
))()


但是,这不是我想要的。我想要的只是getBrowser()方法,该方法只计算一次该值并一直使用它,我不想将值存储在对象中的其他位置,并且我不想在创建对象时立即运行此方法, m仅允许使用该方法,并且所有操作都必须在此一种方法中进行。我在这里举一个例子,您将看到它总是打印出“ 0”,但是我想要的是它为每个console.log请求打印出0、1、2、3。我希望我能说清楚。谢谢。

(
function(window){

    if(window.BRB) return;

    var BRB = function(){}
    BRB.prototype.getBrowser = function(){
        var browser = null;
        return function(){
            if(browser === null){
                browser = 0;
            }
            return browser++;
        }
    }

    window.BRB = new BRB();
})(window);

console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());
console.log(BRB.getBrowser()());

最佳答案

您的要求有点奇怪。这是您要找的东西吗?它通过在getBrowser函数本身上创建一个属性来工作:

(function(window){

    if(window.BRB) return;

    var BRB = function(){}
    BRB.prototype.getBrowser = function(){
        if(typeof this.getBrowser.browser == "undefined"){
            return this.getBrowser.browser = 0;
        } else {
            return ++this.getBrowser.browser;
        }
    }

    window.BRB = new BRB();
})(window);

console.log(BRB.getBrowser());
console.log(BRB.getBrowser());
console.log(BRB.getBrowser());
console.log(BRB.getBrowser());


http://jsfiddle.net/5DheZ/

09-25 18:38