我真的不明白問題是什麼。它是:
- 我可以創建一個變量,直接指向ss.storage?
- 或者我可以通過使用返回該成員的名稱的函數訪問存儲成員?
簡短的回答:是的,你可以和是你可以!
你可以沒有問題當然寫的:
var ss = require("sdk/simple-storage");
var storage = ss.storage;
/* using 'storage' doesn't matter as long as you don't have identifyers collision */
storage[naming()] = new entryConstructor();
// and you still can refer to storage using ss.storage
ss.storage
很像一個JavaScript對象。你不能添加函數成員(如果我沒有弄錯)。
如果你有一個返回string
一個功能,你當然可以訪問/設置存儲屬性/項(這就是我喜歡它命名)使用該功能,假設返回的值是一個javascript compliant member name:
ss.storage[naming()] = new entryConstructor();
其中:
function naming() {
/* returns a valid javascript object property names */
// building of the property name here...
}
和entryConstructor
是allowed types(你自己創造的推測的對象)我喜歡把存儲條目JSON序列化DATAS之一。
在ss.storage中設置條目時請小心。在嘗試設置其值時,應檢查是否存在條目,以防跨越多個會話需要持久數據。如果每個會話開始時間設定值開始,對前幾屆會議註冊舊值會迷路永遠:
let name = naming();
let myEntry;
if (ss.storage.hasOwnProperty(name)) {
// use stored value...
myEntry = ss.storage[name];
} else {
// create value...
myEntry = new entryConstructor()...
}
// make edits... then :
ss.storage[name] = myEntry;
// or handle update on user input, contentScript detach or exports.onUnload
旁註:
- 語法錯誤(缺少括號等小心)
- 當你談論屬性全局對象(窗口)時,你實際上是在談論上下文。