2015-12-24 98 views
0

工作,我试图构建一个JavaScript对象如下:没有在编译时

function returnA(){ return "A" } 

function returnB(){ return "B" } 

现在,当我尝试,

obj = {returnA() : 1, returnB() : 2} 

它给了我语法错误。

在其他的方式,当我做

obj = {}; 
obj[returnA()] = 1; 
obj[returnB()] = 2; 

它完美。为什么第一种对象初始化方法不起作用,而第二种方法起作用?当两者都执行时,是否有任何区别,我的意思是第一次初始化发生在编译阶段(静态绑定),而第二次初始化是在运行时发生的?

请帮助我,因为我是JavaScript新手。

在此先感谢。

编辑: 我需要知道为什么它发生的原因。所以,这个问题与标记为重复的问题不同。

+1

这是一个语法错误的属性名称,所以得到一个语法错误并不奇怪...附: javascript不是“编译”的 –

+0

对象在编译时不能有动态密钥 – Rajesh

+4

它可以在[ES2015](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer #Computed_property_names)'obj = {[returnA()]:1,[returnB()]:2}' – adeneo

回答

1

obj = {returnA() : 1, returnB() : 2},这显然给出了一个错误,你不能分配给一个调用的结果。

obj = {}; 
obj[returnA()] = 1; 
obj[returnB()] = 2; 

这个工作,因为returnA()returnB()将返回一个字符串,这将成为对象