Javascript函数与方括号

时间:2017-03-28 22:28:36

标签: javascript function arguments brackets

我通常用Python编程,但今天我试图对一些Javascript代码进行逆向工程,我遇到了这一行:

var ABC = DEF[XYZ];

DEF是之前定义的function。这需要一个论点。 XYZ是之前创建的string,它包含之前运行DEF的结果。

我不太了解JavaScript,但在我看来它似乎正在定义一个名为ABC的变量,其中包含使用参数DEF运行函数XYZ的结果。但是,稍后有一行var GHI = ABC(JKL, DEF(MNO))JKLMNO都是前面定义的变量)。

让我感到困惑的是ABC被定义为变量,而不是函数。所以我认为这与之前看到的方括号有关。

所以我的问题是:这些方括号的目的是什么?

1 个答案:

答案 0 :(得分:0)

  

这些方括号的目的是什么?

访问对象的成员。

它没有调用函数。它试图访问对象DEF的成员(没有看到其余的代码,就无法分辨出DEF是什么类型的对象,因为你可以使用它对象成员加入类似于包含成员的任何类型的对象,如普通对象,函数,数组等。)例如:

var DEF = {
  foo: 'bar'
};

var XYZ = 'foo';

var ABC = DEF[XYZ];

console.log(ABC); // => 'bar'

另一个例子是,DEF也可以是一个数组,如果XYZ是一个数字,那么它就是访问该数组的特定索引。

更新

如果DEF是一个函数,您仍然可以访问它的成员:

function DEF(arg) {
  // do something with arg
}

DEF.foo = function(str) {
   console.log('I am doing ' + str)
}

var XYZ = 'foo'

console.log(DEF[XYZ]) // => function() {}

var ABC = DEF[XYZ]

ABC('yoga') // => 'I am doing yoga'

你可以这样打电话给DEF[XYZ](someArgument)