你如何对现有的闭包进行操作?

时间:2012-02-16 14:21:26

标签: javascript

创建闭包很容易,但使用它对我来说很困惑。这是我的关闭。一旦我拥有它,我需要能够像doWork,calculateThis,doAnimation等一样调用它上面的操作,但似乎没有办法访问闭包内的函数。

function worker(input) {
    return function () {
        doWork = function () {
             alert("doing work");
        };
    }
}

function caller() {
    var myWorker = worker();
    myWorker.doWork(); // this fails
}

*您提出的问题似乎是主观的,可能会被关闭。 - 再次感谢stackoverflow

2 个答案:

答案 0 :(得分:4)

我相信这就是你要求的:

function worker(input) {
    return {
        doWork: function () {
             alert("doing work");
        },
        doAnimation: function() {
             alert("animating");
        }
    }
}

现在可以使用您的代码调用它:

var myWorker = worker();
myWorker.doWork();
myWorker.doAnimation();

请注意,您的代码实际上并没有使用闭包,但是这个闭包:

function worker(input) {
    return {
        doWork: function () {
             alert("doing work: " + input);
        },
        doAnimation: function() {
             alert("animating: " + input);
        }
    }
}

var workerA = worker('A');
var workerB = worker('B');
workerA.doWork();
workerB.doAnimation();

你能看出差异吗?

答案 1 :(得分:1)

您正在尝试执行方法work(),但在您的示例中,您返回的是函数,而不是具有“work”属性的对象。

以下是您可能会追求的内容:

function worker(input) {
    return {
        work: function () {
            alert("doing work");
        };
    }
}