[英]Typescript method overloading with one parameter of different type (non-primitive)
[英]Does LocalStorage support Custom (i.e. non-primitive type) Object Storage and Retrieval in any way?
因此,我想將JavaScript文件hello.js中的對象“ Hello”傳遞給另一個JavaScript文件chat.js。
Hello包含Strophe.Connections等成員。
我讀到可以使用LocalStorage,即LocalStorage.SetItem(“ Hello”,Hello),然后使用LocalStorage.getItem(“ Hello”)檢索對象。
這對我不起作用,因此我進行了更多搜索,發現JSON字符串化,例如, 在HTML5 localStorage中存儲對象以及在如何將javascript對象從一頁發送到另一頁的某人? 建議使用stringify。
所以我也嘗試過,這是Hello.js的相關代碼:
var Hello = {
connection: null,
start_time: null,
log: function (msg) {
$('#log').append("<p>" + msg + "</p>");
},
send_ping: function (to) {
var ping = $iq({
to: to,
type: "get",
id: "ping1"}).c("ping", {xmlns: "urn:xmpp:ping"});
Hello.log("Sending ping to " + to + ".");
console.log("Sending ping to " + to + ".");
Hello.start_time = (new Date()).getTime();
Hello.connection.send(ping);
},
handle_pong: function (iq) {
var elapsed = (new Date()).getTime() - Hello.start_time;
Hello.log("Received pong from server in " + elapsed + "ms.");
console.log('Received pong from server in " + elapsed + "ms.');
localStorage.setItem("hello", JSON.stringify(Hello));
return false;
}
};
這是chat.js
var Hello = {
conn: null
};
$(document).ready(function(e) {
Hello = JSON.parse(localStorage.getItem("hello"));
$('#input3').bind('click',
Hello.connection.send("someStanza"))});
在線Hello = JSON.parse(localStorage.getItem(“ hello”)); 我嘗試還原該對象。
還有2行,我叫Hello.connection.send。 但是,很明顯,我無法正確傳遞和還原Hello對象。 例如,在Google Chrome JavaScript調試器中,我在那一行收到一條錯誤消息,指出"Uncaught TypeError: undefined is not a function"
,這意味着從"Uncaught TypeError: undefined is not a function"
,Chrome JS引擎無法在其中找到任何connection.send成員。 Hello對象。
剩下兩個選擇。 我嘗試做的任何事情(傳遞不是原始數據類型的對象)都無法實現。 或者,這可能是我執行操作時遇到的方式,只是我沒有看到其他錯誤/問題。
如果可能,我在做什么錯?
如果不可能以這種方式傳遞非原始數據類型,我該怎么辦?
希望我能足夠清楚地理解我,
謝謝,br
克里斯
一種解決方法是toString
函數,然后將其存儲在localStorage中。 然后,當您從localStorage檢索對象時,將eval
該函數。 這是一個演示的快速演示(它非常愚蠢,可以根據您的需要進行優化/增強...):
function pack(obj){
var packedObj = {};
for (key in obj) {
// If obj property is a function, toString() it.
if (obj[key] && obj[key].constructor === Function) {
packedObj[key] = obj[key].toString();
} else {
packedObj[key] = obj[key];
}
}
return JSON.stringify(packedObj);
}
function unpack(obj) {
// Temporary variable to hold eval'd func, if needed
var temp;
// Parse obj to loop
obj = JSON.parse(obj);
for (key in obj) {
if (typeof obj[key] === "string") {
eval('temp =' + obj[key]);
// Assign eval'd function
obj[key] = temp;
} else {
obj[key] = obj[key];
}
}
return obj;
}
在小提琴中,我有:
// Packed Item
localStorage.setItem('test', pack(Hello));
// Unpack
testObj = unpack(localStorage.getItem('test'));
testObj.handle_pong();
希望這對您有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.