如何使用requireJS访问模块变量?

10 javascript design-patterns amd modular requirejs

我已经使用Javascript了一段时间,我刚刚尝试过使用模块和requireJS,这很难让我对新的设计模式有所了解!

这是我的第一次尝试:

require([
    "jquery",
    "testModule"
], function ($, testModule) {
    $(function () {
        var testInstance1 = testModule;
        testInstance1.setID(11);
        alert(testInstance1.id);
    });
});
Run Code Online (Sandbox Code Playgroud)

和testModule.js

define([
  'jquery'
], function ($) {

    var id = 0;

    var setID = function (newID) {
        id = newID;
        return id;
    };
    return {
        setID: setID,
        id:id
    };
});
Run Code Online (Sandbox Code Playgroud)

这返回0,我期待11.我错过了什么?

当然,它也是一个简化的例子.我想创建多个对象,每个对象应保持自己的状态变量.例如,如果我想要一个模块将一个列表附加到一个容器,DIV但是还包含要添加的函数,清除或查询该列表中的数据,我应该如何构建模块函数,以便每个实现都保持自己的状态.

谢谢

Ste*_*hen 6

你实际上并没有遗漏任何与此相关的requireJS.问题是只有对象通过引用传递(并且可能是数组......现在无法确定).数字不是.因此,当您返回{setID:setID,id:id}时,'id'被设置为'id' 的,永远不会再次更新.你想要做的是使用一个函数,如'getID',它将引用原始变量,而不是原始变量的:

return {
    setID: setID,
    getID: function () {return id;}
};
Run Code Online (Sandbox Code Playgroud)

然后...

testInstance1.setID(11);
alert(testInstance1.getID());
Run Code Online (Sandbox Code Playgroud)