2012-01-12 81 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無法實現這一點,因爲它僅僅是客戶端,並且主要是爲了呈現用戶界面。