没有在编译时
问题描述:
工作,我试图构建一个JavaScript对象如下:没有在编译时
function returnA(){ return "A" }
function returnB(){ return "B" }
现在,当我尝试,
obj = {returnA() : 1, returnB() : 2}
它给了我语法错误。
在其他的方式,当我做
obj = {};
obj[returnA()] = 1;
obj[returnB()] = 2;
它完美。为什么第一种对象初始化方法不起作用,而第二种方法起作用?当两者都执行时,是否有任何区别,我的意思是第一次初始化发生在编译阶段(静态绑定),而第二次初始化是在运行时发生的?
请帮助我,因为我是JavaScript新手。
在此先感谢。
编辑: 我需要知道为什么它发生的原因。所以,这个问题与标记为重复的问题不同。
答
obj = {returnA() : 1, returnB() : 2}
,这显然给出了一个错误,你不能分配给一个调用的结果。
obj = {};
obj[returnA()] = 1;
obj[returnB()] = 2;
这个工作,因为returnA()
和returnB()
将返回一个字符串,这将成为对象
这是一个语法错误的属性名称,所以得到一个语法错误并不奇怪...附: javascript不是“编译”的 –
对象在编译时不能有动态密钥 – Rajesh
它可以在[ES2015](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer #Computed_property_names)'obj = {[returnA()]:1,[returnB()]:2}' – adeneo