2017-02-21 11 views
1

У меня есть объект с именем 'type'. Этот тип - это имя другого свойства объекта. Могу ли я достичь желаемого результата, не разбивая объявление на несколько частей, используя синтаксис Object Literal. Вот что я имею, помощь приветствуется.Как ссылаться на свойство sibling для использования в декларации имени свойства? [object literal, Javascript, es6]

// desired output 
 
// { 
 
//  name: 'Tom Ford', 
 
//  type: 'random-type', 
 
//  'random-type': { 
 
//   title: 'Blah', 
 
//   amount: 2000 
 
//  } 
 
// } 
 

 

 
var thisRefTest = { 
 
    name: 'Tom Ford', 
 
    type: getRandomType(), 
 
    [this.type]: { 
 
     title: 'Blah', 
 
     amount: 2000 
 
    } 
 
} 
 

 
console.log('thisRefTest', thisRefTest) 
 
// output: 
 
// { 
 
// "name": "Tom Ford", 
 
// "type": "random-type", 
 
// "undefined": { 
 
//  "title": "Blah", 
 
//  "amount": 2000 
 
// } 
 
// } 
 

 
var funcRefTest = { 
 
    name: 'Tom Ford', 
 
    type: getRandomType(), 
 
    [function() { 
 
      return this.type; 
 
    }()]: { 
 
     title: 'Blah', 
 
     amount: 2000 
 
    } 
 
} 
 

 
console.log('funcRefTest', funcRefTest) 
 
// output: 
 
// { 
 
// "name": "Tom Ford", 
 
// "type": "random-type", 
 
// "undefined": { 
 
//  "title": "Blah", 
 
//  "amount": 2000 
 
// } 
 
// } 
 

 
function getRandomType(){ 
 
    return 'random-type'; 
 
}

+1

Вы не можете. Создайте переменную типа перед созданием 'funcRefTest' и используйте его. – dfsq

+0

То, что я до сих пор делал ... спасибо за поддержку –

+0

Во-первых, вы не можете использовать 'this' в литеральном определении. Он не настроен на создание объекта. Это все еще значение, которое было до начала объявления. Во-вторых, в Javascript нет способа ссылаться на текущий объект в середине создания. Они просто этого не предлагают. Таким образом, свойства, которые должны быть созданы на основе значений других свойств, должны быть добавлены после создания первоначального объекта или вам необходимо сохранить необходимые значения в локальных переменных до того, как начнется определение литерала объекта, чтобы у вас был способ ссылаться на них , – jfriend00

ответ

0

Только если вы определите переменную со значением первого

var type = getRandomType(); 
var thisRefTest = { 
    name: 'Tom Ford', 
    type: type, 
    [type]: { 
    title: 'Blah', 
    amount: 2000 
    } 
}; 

Дело в том, что нет ни одного объекта в момент создания экземпляра. Javascript интерпретатор не может ссылаться на свойство объекта, которое не создано, в то время как соответствующая закрывающая скобка } не выполняется.