Javascript引用对象中的字符串变量名称

时间:2015-10-25 19:47:52

标签: javascript json

我正在使用JavaScript制作音乐合成程序,最近我遇到了一个需要尽可能快地迭代数据的块。我有一个名为song的JSON对象,它就像这样设置了

song = {“track0”:“data ...”,“track1”:“data ...”,...};

我想知道我是否在歌曲JSON对象中使用了一些函数。如何从track0迭代到trackn?我知道我可以做一些像歌曲[“track”+ n]但这就是我现在正在做的事情,我的目标是将我的功能转移到歌曲JSON对象中,这样我可以更快地迭代......或者没有表现如果我只是将我的函数移动到对象中,那么我将获得什么?

3 个答案:

答案 0 :(得分:1)

根据定义,

JSON can't contain functions - only data

如果您能够修改数据结构,请考虑使用轨道数组,而不是使用。例如:

song = {"tracks":["data...", "data...", ...], ...};

答案 1 :(得分:0)

所以你想要一个对象来存储你的功能。假设您要创建一些实用程序功能。

var utils = {};

现在你可以拥有

utils.function1 = function() {
    //function1 body here 
};

utils.function2 = function() {
    //function2 body here 
};

utils.function3 = function() {
    //function3 body here 
};

从代码组织的角度来看,这更好,但我不相信就性能而言,这将成为瓶颈。

底线:将函数移动到对象不会有任何性能提升。

答案 2 :(得分:0)

@Muggy Ate

  

如何从track0到trackn进行迭代?我知道我可以做一些像歌曲[“track”+ n]但这就是我现在正在做的事情,我的目标是将我的功能转移到歌曲JSON对象中,这样我可以更快地迭代......或者没有表现如果我只是将我的函数移动到对象中,那么我将获得什么?

有很多方法可以实现这一目标。我会提出一种方法。 您只能拥有一个执行所需功能的功能,这是一个可以在您需要的对象上下文中运行的唯一功能。通过注入上下文,您可以在其他对象中创建对该函数的引用,例如:

Accept-Encoding

另一个优点是您还可以使用原型继承创建对象。

如果你想通过添加方法扩展你的对象,你可以这样做,正如我们在前面的例子中看到的那样,我们在function iterator (criteria) { var obj = this, prop; for (prop in obj) { //TODO: Add what you need to do in each iteration if (obj[prop] == criteria) { return prop; } } } //mockups var song1 = { "track0": "data0", "track1": "data1" }, song2 = { "track0": "data0", "track1": "data1" }; //iterates over song1 object, //for this case, we look for the property that has the value "data0" var something = iterator.call(song1, 'data0'); //something = "track0" 函数中使用了this,这给了我们优势使用不同的对象

iterator