Javascript在对象内通过字符串引用变量名
Javascript referencing variable name by string within object
我正在用JavaScript制作一个音乐作曲程序,最近我遇到了一个问题,我需要尽可能快地迭代我的数据。我有一个位JSON对象song它的设置是这样的
歌= {" track0":"数据…","track1":"数据 ...", ...};
我想知道如果我生病几个函数到歌曲JSON对象。如何从track0迭代到trackn?我知道我可以做像song["track"+ n]这样的事情,但这就是我现在正在做的,我的目标是将我的函数移动到song JSON对象中,这样我就可以更快地迭代…或者,如果我只是把函数移到对象中,就不会有任何性能上的提高吗?
根据定义,JSON不能包含函数,只能包含数据。
如果您能够修改数据结构,请考虑使用曲目数组,而不是像您那样使用。例如:
song = {"tracks":["data...", "data...", ...], ...};
@Muggy Ate
如何从track0迭代到trackn?我知道我可以做像song["track"+ n]这样的事情,但这就是我现在正在做的,我的目标是将我的函数移动到song JSON对象中,这样我就可以更快地迭代…或者,如果我只是把函数移到对象中,就不会有任何性能上的提高吗?
有很多方法可以做到这一点。我只提出一种方法。你只能有一个函数来执行你所需要的,这个函数只能在你需要的对象的上下文中运行。同样,通过注入上下文,你可以在其他对象中创建对该函数的引用,例如:
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"
另一个优点是您还可以使用原型继承创建对象。
如果您想通过添加方法来扩展您的对象,您可以这样做,正如我们在前面的示例中看到的那样,我们在iterator
函数中使用this
,这给我们提供了处理不同对象的优势
//extends obj by attaching new methods
//and binding the execution context of the methods
function addMethods(obj) {
obj.iterator = iterator.bind(obj);
}
addMethods(song1);
addMethods(song2);
//we use the "iterator" method extended inside song2
something = song2.iterator('data1');
//something = "track1"
所以您需要一个对象来存储您的函数。假设您想要创建一些实用函数。
var utils = {};
现在可以有
utils.function1 = function() {
//function1 body here
};
utils.function2 = function() {
//function2 body here
};
utils.function3 = function() {
//function3 body here
};
从代码组织的角度来看,这是更好的,但我不认为这将是性能方面的瓶颈。
底线:将函数移到对象中不会获得任何性能增益。
- 如何在JavaScript中将字符串转换为函数引用
- 如何在JavaScript中正确引用Oracle SQL字符串
- 无法获取属性'字符串'的未定义或null引用IE 11 ASP.NET
- 如何从onclick字符串中引用javascript对象函数
- Javascript-如何从字符串/对象引用回调
- jQuery 字符串转义 onclick='deleteRow(item“+count+”)' 如何引用项目和计数
- 空引用错误 Eval(字符串) 将其传递给代码隐藏中的函数
- 使用 jQuery 将 HTML 文本抓取到 JSON 中,但由于循环引用而无法字符串化
- 如何引用C#;一个单独的Javascript文件中的字符串
- 如何使用字符串引用变量
- 两个字符串引用相同的值
- 如何将对象引用为字符串名称
- 通过将对象和键引用为字符串来获取数组/对象值
- AngularJS将字符串转换为引用$scope中的对象的对象/数组
- Javascript - 使用字符串作为对象引用
- 在 JavaScript 中,数组如何引用到空字符串 + true 中是一个有效字符
- 如何使用字符串引用闭包,就像我在不使用 eval 的情况下使用成员函数一样
- Javascript在对象内通过字符串引用变量名
- 从字符串引用Javascript对象
- 字符串引用在javascript闭包中的行为很奇怪