使用单例模式维护整个应用中的数组状态
Mainting the state of array across the entire app using singleton pattern
function MySingletonClass(arg) {
this.arr = [];
if ( arguments.callee._singletonInstance )
return arguments.callee._singletonInstance;
arguments.callee._singletonInstance = this;
this.Foo = function() {
this.arr.push(arg);
// ...
}
}
var a = new MySingletonClass()
var b = MySingletonClass()
Print( a === b ); // prints: true
我的要求是我在每次加载窗口时将对象推送到数组,但是当我打开下一个窗口时,数组的状态不可见。
var arr = [];
arr.push("something");
它被推了。
当我打开新窗口时,数组的长度再次变为零。
仅使用 JavaScript 是没有办法做到这一点的。JavaScript只是语言。它没有任何指向应用程序,页面甚至浏览器的直接链接。JavaScript 可以在许多其他情况下使用(并且正在使用(,例如在服务器端应用程序中以及作为桌面应用程序的插件语言。
当然,当在浏览器中使用JavaScript时,你确实需要一种与页面上的内容"交流"的方式。为此,您可以使用文档对象模型 (DOM( API,该 API 由每个支持 JavaScript 的浏览器实现。要与浏览器本身进行通信,您可以使用window
和其他全局对象。这些有时称为浏览器对象模型(尽管它不是官方 API(。
现在我们知道了;是否有一个 API 允许我们在页面之间维护状态?是的,有。事实上,有几种:
- HTML5的本地存储
- 饼干
以这个例子为例,使用localStorage
:
// On page 1:
localStorage.setItem("message", "Hello World!");
// On page 2:
var message = localStorage.getItem("message");
if (message !== null) {
alert(message);
}
很简单,对吧?不幸的是,本地存储只接受键/值对。要保存数组,您需要先将其转换为字符串。您可以执行此操作,例如,使用 JSON:
// On both pages:
var arr = localStorage.getItem("arr");
if (arr === null) {
arr = [];
} else {
arr = JSON.parse(arr);
}
function saveArr() {
localStorage.setItem("arr", JSON.stringify(arr));
}
// On page 1:
console.log(arr); // []
arr.push("Hello");
arr.push("world!");
saveArr();
// On page 2:
console.log(arr); // ["Hello", "world!"]
但请记住,localStorage
和 JSON
都是相当新的,因此只有现代浏览器支持它们。看看使用 cookie 模拟本地存储和 JSON2.js。
要使
数据跨应用程序持久化,必须有一个数据库。 Javascript无法做到这一点,因为它只是客户端,主要是为了呈现用户界面。
相关文章:
- 从组件状态的数组中删除元素
- 如何在React中更改处于状态的数组
- ReactJS-这个状态中的数组在删除时被正确更新,但结果是't,直到以后的状态发生变化
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 如何使用Handlebars.js按状态拆分对象数组
- 如何从状态数组中删除项目
- React-Redux:当连接到处于状态的数组时无限循环
- 在 ReactJs 状态上将项目添加到数组中,并超时以进行自我删除
- 从 0 和 1 的数组恢复复选框的状态
- 如何推送到实际对象的数组最后状态,清除它并像新对象一样单独编辑
- 反应 redux 与给定数组的合并状态
- 将状态的数组长度设置为 0,但绑定列表仍剩下一个元素
- 在闭包中公开数组的状态,而不允许从外部对其进行编辑
- ReactJs-如何更新数组中的状态
- $_POST 变量保持活动状态多长时间,PHP 如何决定 post 数组中的内容
- Reactjs-对处于状态的对象数组进行排序
- 如何引用Angular Service返回的数组,以便维护状态
- 使用单例模式维护整个应用中的数组状态
- 清除Redux中的数组状态
- 如何在Node模块之间共享数组状态