为什么错误发生在var obj = {'A':'B','C':obj ['A']};?

时间:2018-04-13 06:22:46

标签: javascript javascript-objects

我想创建一个javascript对象,其值“C”复制值“A”:

var obj={
  'A':'some complex function returns a string',
  'C':obj['A']
};

但它有错误。我试着检查键'A'是否真的创建了:

var f=function(str){
  console.log(str);
  return str;
};
var obj={
  [f('A')]:[f('B')],
  "C":obj['A']
};

打印

B
A

然后出错。这意味着'A'已创建,但仍然表示obj ['A']未定义。为什么会这样?

3 个答案:

答案 0 :(得分:1)

您当前的尝试显然失败了,因为在代码构造新对象时,obj变量的值尚未分配。

您可以使用

进行检查
var obj = { C: typeof obj}
  

我想创建一个javascript对象,其值“C”复制值“A”

如果您希望C始终反映A的值,您可以使用

var obj = {
  A: 'Some value',
  get C() {
    return this.A;
  }
}

或拆分obj声明

var obj = { A: 'Some Value' };
obj.C = obj.A

答案 1 :(得分:0)

您收到错误是因为当您尝试从内部访问obj时尚未定义var obj = { A : 'Hello', get C() { return this.A; } }; console.log(obj.C);

要使代码正常工作,您可以使用getter。

  

get语法将对象属性绑定到将要的函数   查找该属性时调用。 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

此外,您不需要对象属性的引号。

  

如果属性名称是数字文字,则可以省略引号   或有效的标识符名称。

Cannot read property '_meta' of undefined

答案 2 :(得分:0)

您无法引用尚未创建的变量。你可以这样做。

var obj = { 'A' : 'some complex function returns a string' }
obj['C'] = obj['A']