如何使用javascript将对象存储为数组中的键

时间:2011-08-01 09:36:59

标签: javascript safari-extension

  

可能重复:
  How to store objects in a array using javascript

我想将对象存储为数组中的键是什么解决方案。

var myTabObj = safari.application.activeBrowserWindow.activeTab;

我想将myTabObj存储为数组中的键。我认为myTabObj对于特定的Safari浏览器选项卡是唯一的。

如何在safari扩展开发中设置特定于标签的值。

我想立即解决,请帮助我。例如,我有3个参数动态地为每个选项卡设置什么是解决方案或任何替代解决方案。

提前致谢

2 个答案:

答案 0 :(得分:1)

首先,你应该使用一个对象(哈希)而不是一个数组。无论如何你都这样做 - 数组是Javascript中的一个对象(哈希)。您可以将数组视为JS中的对象(哈希),使用非数字值作为键,但这很麻烦 - 您可以在对象原型中获得数组函数和dproperties,例如arr.length,但它们仅适用于存储在array-object中的数字键。

示例(进入Firebug的JS控制台):

>>> a=[]
[]

>>> a[{}] = 42
42

>>> console.dir(a)      
[object Object]   42
>>> a.length
0
>>> a[{}]
42

首先我创建一个数组。然后我创建一个带有键“{}的属性,其中toString被隐式调用”在表示数组的对象中。由于这不是数字键,因此特定于数组的函数会忽略它 - 数组的长度为0.但是,如最后一行所示,数组实例(JS中的所有对象都是DOES)存储属性。

其次,对象(哈希)。

键始终是字符串。这就是为什么有些人说你不能用对象作为键 - 但事实并非如此!如果在Javascript中使用非字符串值作为键,则将调用该对象的toString()方法。每个对象都有该方法,因为它是在Object.prototype.toString上定义的。但是,如果不覆盖该回退本机方法,您始终可以获得与您拥有的任何对象完全相同的字符串。

示例(进入Firebug的JS控制台):

>>> a={}
Object {}

>>> a[{}] = 1
1

>>> console.dir(a)
[object Object]   1

>>> a[{prop:"text"}] = 1
>>> console.dir(a)
[object Object]   1

因此,您可以使用对象作为键,但您必须确保为您打算使用的所有对象实例定义自己的toString函数。那些toString函数通常打印类似(“类”)名称加上存储在实例中的(唯一)字符串ID值。如果oyur toString函数不能保证为不同的对象生成一个唯一的字符串,你不能使用对象(实例)作为键,当然你可以,但它显然有点无用,因为你没有可靠的1:1映射。

这不是具体的帮助,但我必须承认,我更愿意就语言如何运作提供一般性的建议 - 此外,为了给出一个具体的解决方案,我说的还没有足够的(代码)背景。无论如何,要将它存储在数组中只需使用

var arr = [];

arr.push(instance);

然后使用for循环或“... each()” - 您选择的JS库框架的函数迭代数组,如果您使用它。

答案 1 :(得分:1)

您可以使用我的jshashtable来存储使用任意对象作为键的值。