2012-01-12 67 views
1
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 

我要求Mainting整个应用阵列的状态是我正在推动对象添加到阵列上的窗口中的每个负载,但是当我打开下一个窗口阵列的状态是不可见的。使用单例模式

var arr = []; 
arr.push("something"); 

//被推动。

当我打开新窗口时,数组的长度再次变为零。

回答

3

无法单独使用JavaScript来完成此操作。 JavaScript是只是的语言。它没有任何与应用程序,页面甚至浏览器的直接链接。在许多其他情况下(例如在服务器端应用程序中)和作为桌面应用程序的插件语言,JavaScript可以被使用(并且被使用)。

当然,在浏览器中使用JavaScript时,您确实需要一种方式来与页面上的内容“进行通信”。为此,您可以使用由支持JavaScript的每个浏览器实现的Document Object Model(DOM)API。要与浏览器本身进行通信,您可以使用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

1

要使数据在整个应用程序中持续存在,必须有一个数据库。 JavaScript无法实现这一点,因为它仅仅是客户端,并且主要是为了呈现用户界面。