在Add On SDK中创建动态或计算对象

时间:2016-05-13 13:06:53

标签: javascript firefox-addon-sdk

我正在创建一个应用程序,它根据Simple-Storage中访问过的每个页面的url存储一个唯一的对象。

     var ss = require("sdk/simple-storage");
     ss.storage[naming()] = new entryConstructor; 

naming()是一个为每个对象生成自定义名称的函数。

通常可以将变量声明为属性全局对象(Window)。这可能用于存储吗?

1 个答案:

答案 0 :(得分:0)

我真的不明白问题是什么。是吗:

  • 我可以创建一个直接指向ss.storage的变量吗?
  • 或者我可以使用返回该成员名称的函数来访问存储成员吗?

简短回答:是的,你可以是的,你可以

你当然可以毫无问题地写作:

ss.storage

string非常像一个javascript对象。你不能将功能成员添加到它(如果我没有弄错的话)。

如果您有一个返回ss.storage[naming()] = new entryConstructor(); 的函数,您当然可以使用该函数访问/设置存储属性/条目(我喜欢命名它),假设返回值是javascript compliant member name

function naming() {
    /* returns a valid javascript object property names */
    // building of the property name here...
}

其中:

entryConstructor

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 allowed types之一(可能是您自己创建的对象)我喜欢将存储条目视为JSON可序列化数据。

在ss.storage中设置条目时要小心。在尝试设置其值之前,应检查条目是否存在,以防您需要跨多个会话的持久数据。如果您每次开始会话时都设置值,那么之前会话中注册的旧值将永远丢失:

perf_month,Jan-15,Feb-15,Mar-15,Apr-15,May-15,Jun-15,Jul-15,Aug-15,Sep-15,Oct-15,Nov-15,Dec-15,Jan-16,Feb-16,Mar-16<br>
open_acc,5843,7126,7682,5517,6965,7519,2579,2572,8108,356,8950,718,1214,6523,8068<br>
inter_sales,6086,6910,3094,1027,7797,8109,6510,8451,311,5682,9716,8561,8044,7141,8790<br>
exter_sales,6345,3933,9529,1457,7920,8608,3910,971,6070,5859,7899,5342,3466,2005,4357<br>
close_acc,6594,1712,1358,1830,3437,7454,3697,6621,9882,1308,3069,3576,9583,5780,6455<br>
balance,4128,1490,8354,3470,7506,9309,7637,9082,4029,1256,9010,6117,1162,8028,1078<br>
payment,1179,8452,8040,2082,8351,1494,1877,2772,5985,477,7153,1857,1572,5698,1436<br>

附注:

  • 小心语法错误(缺少括号等)
  • 当你谈到属性全局对象(窗口)时,你实际上是在讨论上下文。