gpt4 book ai didi

javascript - 使用单例模式在整个应用程序中维护数组状态

转载 作者:行者123 更新时间:2023-11-30 10:45:10 25 4
gpt4 key购买 nike

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 时,您确实需要一种方式来与页面上的内容进行“交流”。为此,您可以使用 Document Object Model (DOM) API,由所有支持 JavaScript 的浏览器实现。要与浏览器本身通信,您可以使用 window和其他全局对象。这些有时被称为浏览器对象模型(尽管它不是官方 API)。

现在我们知道了;是否有 API 允许我们在页面之间维护状态?就在这里。其实有以下几种:

以这个例子为例,使用 localStorage:

// On page 1:
localStorage.setItem("message", "Hello World!");
// On page 2:
var message = localStorage.getItem("message");
if (message !== null) {
alert(message);
}

简单吧?不幸的是,localStorage 只接受键/值对。要保存数组,您需要先将其转换为字符串。例如,您可以使用 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!"]

不过请记住,localStorageJSON 都是相当新的,因此只有现代浏览器才支持它们。看看emulating localStorage using cookiesJSON2.js .

关于javascript - 使用单例模式在整个应用程序中维护数组状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8831389/

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