我通常用Python编程,但今天我试图对一些Javascript代码进行逆向工程,我遇到了这一行:
var ABC = DEF[XYZ];
DEF
是之前定义的function
。这需要一个论点。 XYZ
是之前创建的string
,它包含之前运行DEF
的结果。
我不太了解JavaScript,但在我看来它似乎正在定义一个名为ABC
的变量,其中包含使用参数DEF
运行函数XYZ
的结果。但是,稍后有一行var GHI = ABC(JKL, DEF(MNO))
(JKL
和MNO
都是前面定义的变量)。
让我感到困惑的是ABC
被定义为变量,而不是函数。所以我认为这与之前看到的方括号有关。
所以我的问题是:这些方括号的目的是什么?
答案 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)
。