是否可以访问数组元素中的变量实例?

时间:2014-02-25 04:28:59

标签: javascript jquery html

我知道JS不是OOP,但我想知道是否可以访问数组元素中变量的“实例”。我将用一个例子来更好地说明这一点:

我有一个数组gSzQuestions[],其中包含10个类似的字符串模板(即表格),其中包含一些变量(比方说q1, q2, q3, q4)。如果可能的话,我想访问它们,因为我们假设q代表问题,并且有一个单独的表来显示回答的选项。如果用户选择了错误的答案,我想显示(在程序的最后)哪个问题是错误的。

如果无法访问这些变量,我如何存储问题和答案的历史记录以便以后检索它们?

编辑:
假设我有一个var questionString = '<table><td><tr>' + q1 + '</tr></td></table>(缩写为简洁目的,实际代码要长得多)。在数组gSzQuestions中,每次调用functionA()时,将存储10个questionString个实例,每个实例都包含q1,其中每个实例的值随机化为Math.random()。我的问题是,有没有办法在[{1}}中访问q1,例如gSzQuestions[1]

1 个答案:

答案 0 :(得分:0)

不,与字符串连接的变量在存储之前会被评估,因此所有内容都会被“展平”。

但是,您可以为它创建一种模板,并将字符串和变量作为对象存储在数组中:

var questions = [];

var question1 = {
    text: '<table><td><tr>{VAR}</tr></td></table>',
    variable: 1
}

var question2 = {
    text: '<table><td><tr>{VAR}</tr></td></table>',
    variable: 20
}

questions.push(question1);
questions.push(question2);
... etc...

现在,您可以提取包含字符串的对象并格式化当前变量:

var qIndex = 0;
var str = questions[qIndex].text.replace('{VAR}', questions[qIndex].variable);

Live example here

您可以使用此方法代替对象文字:

var Question = function(text, variable) {
    this.toString = function() {
        return text.replace('{VAR}', variable);
    }
}

现在将其存储为:

var questions = [
    new Question('This is value: {VAR}', 1),
    new Question('This is value: {VAR}', 20),
    new Question('This is value: {VAR}', 60),
]

然后获取格式化的字符串:

alert(questions[0].toString());

Live example

希望这有帮助。