我知道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]
?
答案 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);
您可以使用此方法代替对象文字:
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());
希望这有帮助。