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");
//它被推了。
当我打开新窗口时,数组的长度再次变为零。
答案 0 :(得分:3)
单独使用JavaScript无法做到这一点。 JavaScript 只是语言。它没有任何直接链接到应用程序,页面甚至浏览器。 JavaScript可以在许多其他情况下使用(并在其中使用),例如在服务器端应用程序中以及作为桌面应用程序的插件语言。
当然,当在浏览器中使用JavaScript时,您确实需要一种与页面上的内容“通信”的方式。为此,您可以使用Document Object Model(DOM)API,该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!"]
请注意,localStorage
和JSON
都是相当新的,所以只有现代浏览器才支持它们。请查看emulating localStorage using cookies和JSON2.js。
答案 1 :(得分:1)
要在应用程序中保留数据,必须有数据库。 Javascript无法实现这一点,因为它只是客户端,主要用于呈现用户界面。