gpt4 book ai didi

Javascript AMD 模式混淆 - 持久化属性值

转载 作者:行者123 更新时间:2023-12-02 18:06:29 24 4
gpt4 key购买 nike

所以我试图使用 requireJS 来了解 javascript AMD 模式。 。我对 JS 的经验有限,毫无疑问这就是阻碍我的原因。如果我被指向“JS for Dummies”的方向,我不会感到惊讶。如果有人愿意帮助我解决这个问题,我将非常感激。

我定义了一个名为“security”的模块,它具有以下定义 - 减少一点。

define(['services/storage'], function(storage) {

var security = {
authToken: {},
loadAuthToken: loadAuthToken,
saveAuthToken: saveAuthToken,
};

return security;

function saveAuthToken(token) {
if (token) {
storage.save("DiffusrAuthToken", token);
security.authToken = token;
}
};

function loadAuthToken() {
if (security.authToken.expires) {
return security.authToken;
} else {
var token = storage.load("DiffusrAuthToken");
security.authToken = token;
return token;
}
};
})

本质上,我想保存模块中定义的某些值的状态,在上面的例子中是authToken。这样,当其他模块需要这个模块时,我不必去localStorage来获取它。我可以让它工作的唯一方法是定义返回对象的属性,并最初将其设置为空对象。这似乎并不令人满意,因为我不想将其直接暴露给其他模块,因为他们可以更改它。

非 AMD 方式是在全局范围内定义一个对象并向其附加属性。但是,我认为 AMD 的全部目的就是避免这种情况。

问题:一般来说,我应该如何在可以从其他模块访问的模块中设置值?

最佳答案

未在模块中导出的任何内容都无法在模块外部访问,但在模块闭包内仍然可用。例如,您可以创建一个 var 但绝不将其附加为 security 的属性。导出对象。您可以为导出对象创建特定的访问器方法,该方法只能以您希望模块用户访问的方式访问此私有(private)变量,就像您对 saveAuthToken 所做的那样。和loadAuthToken方法。

define(['services/storage'], function(storage) {

var authToken; // private to security module

function saveAuthToken(token) {
if (token) {
storage.save("DiffusrAuthToken", token);
authToken = token; // store to private variable
}
};

function loadAuthToken() {
if (authToken.expires) {
return authToken;
} else {
var token = storage.load("DiffusrAuthToken");
authToken = token;
return token;
}
};

// export contains no reference to authToken
var security = {
loadAuthToken: loadAuthToken,
saveAuthToken: saveAuthToken,
};

return security;

});

关于Javascript AMD 模式混淆 - 持久化属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com