对象创建后的方括号

时间:2015-11-19 11:54:34

标签: javascript object

我遇到以下代码的问题:

// 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的新手,我还没有找到任何相关信息。 我真的很感激任何帮助。

2 个答案:

答案 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

在您的示例中,创建了一个包含字段onState1onState2的对象。然后,使用下标运算符提取正确的属性。它等同于写作

prog.stateChange = function(state)
{

    var temp = 
    {
        onState1: function()
        {
           // some code
        },

        onState2: function()
        {
            // some code
        } 
    };
  var functionOfState = state == onState1 ? temp.onState1 : temp.onState2;
  functionOfState();
}

这不是从对象中提取属性/方法的合法方法。基本上如果有人更改方法的名称,代码就会中断。简单地使用开关盒就好多了。