我遇到以下代码的问题:
// At the beginning
var prog = {}
// some attributes of prog and other methods
// ...
prog.stateChange = function(state)
{
var functionOfState =
{
onState1: function()
{
// some code
},
onState2: function()
{
// some code
}
}['on'+state]()
}
在创建对象functionOfState之后,这些方括号的目的是什么?这是一系列可能的方法吗?
抱歉,我是JS的新手,我还没有找到任何相关信息。 我真的很感激任何帮助。
答案 0 :(得分:0)
此代码与几乎相同:
var functionOfState =
{
onState1: function()
{
// some code
},
onState2: function()
{
// some code
}
}
functionOfState['on'+state]();
它只是创建一个存储不同功能的对象。然后,它根据state
的当前值调用其中一个。
也许,这个会更容易:
var functionOfState = {};
functionOfState['onState1'] = function() {
// someCode
};
functionOfState['onState2'] = function() {
// someCode
};
functionOfState['on'+state](); // when state is 'State2', 'onState2' will be called
在您的代码中,它不会将此对象与函数一起存储,而是直接调用它。
答案 1 :(得分:0)
这是从对象中提取字段的(不是最清晰的)方法
在JS中,下标运算符([]
)可以像点运算符(.
)一样从对象中提取属性,因此以下表达式是相同的:
var obj = { field : value };
obj.field == obj["field"]; //returns true
在您的示例中,创建了一个包含字段onState1
,onState2
的对象。然后,使用下标运算符提取正确的属性。它等同于写作
prog.stateChange = function(state)
{
var temp =
{
onState1: function()
{
// some code
},
onState2: function()
{
// some code
}
};
var functionOfState = state == onState1 ? temp.onState1 : temp.onState2;
functionOfState();
}
这不是从对象中提取属性/方法的合法方法。基本上如果有人更改方法的名称,代码就会中断。简单地使用开关盒就好多了。