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

标签 javascript design-patterns requirejs amd modular

我已经使用 Javascript 一段时间了,我只是第一次尝试使用模块和 requireJS,很难理解新的设计模式!

这是我的第一次尝试:

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

和 testModule.js

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

    var id = 0;

    var setID = function (newID) {
        id = newID;
        return id;
    };
    return {
        setID: setID,
        id:id
    };
});

这将返回 0,而我期待的是 11。我错过了什么?

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

谢谢

最佳答案

您实际上并没有遗漏任何与此处相关的 requireJS。问题是只有对象通过引用传递(也许数组......现在不能确定)。数字不是。因此,当您返回 {setID: setID, id: id} 时,“id”被设置为“id”的,再也不会被更新。您要做的是使用诸如“getID”之类的函数,它将引用原始变量,而不是原始变量的:

return {
    setID: setID,
    getID: function () {return id;}
};

然后……

testInstance1.setID(11);
alert(testInstance1.getID());

关于javascript - 如何使用 requireJS 访问模块变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449845/

相关文章:

c# - 使用 IOC 容器的策略设计模式 - 专门用于 Ninject

java - 我处于反模式中,我想离开

javascript - 将 JSON 直接传递给 Javascript,无需 JSON.parse()

javascript - react JS : Avoid the Modal to be executed when the component is rendered

javascript - 将函数的 "call"-function 存储在变量中

c++ - 为什么要避免在 C++ 中使用单例

javascript - RequireJs 导出 Handlebars 模板

javascript - 尝试调用 typescript 文件中的函数时出现模块未定义错误

backbone.js - 如何配置 karma 以正确使用 'define'(with backbone.js)?

javascript - 从具有多个参数的数组中删除重复值