2016-11-18 2 views
0

Принял у меня много времени, чтобы создать заголовок, но его все равно трудно понять.ES6 вызов с переменным внутренним массивом, который находится внутри объекта с несколькими объектами или свойствами

В любом случае, это то, что я хочу делать, но не знаю, как это сделать, или даже возможно, поэтому, пожалуйста, просветите меня.

Здесь:

const defaults = { 
    backgroundcolor: '#000', 
    color: '#fff', 
    getProps: [ 
    'some value', 
    `${this.backgroundcolor}`, 
    `${this.color}` 
    ] 
}; 

Я знаю, что могу назвать его вне объекта, как defaults.backgroundcolor, но я хочу знать, если код выше достижимо тоже? Заранее спасибо.

+0

'this' не имеет значения, которое вы хотите, чтобы иметь внутри статической декларации. Javascript не работает. Вы можете назначить 'defaults.getProps' после того, как вы объявили объект, а затем можете ссылаться на другие свойства объекта. – jfriend00

ответ

1

Если вы getProps метод, вы можете заставить его работать:

const defaults = { 
 
backgroundcolor: '#000', 
 
color: '#fff', 
 
getProps: function() { return [ 
 
    'some value', 
 
    `${this.backgroundcolor}`, 
 
    `${this.color}` 
 
];} 
 
}; 
 

 
var x = defaults.getProps(); 
 

 
console.log(x);

Если он должен быть аа свойство, которое можно получить доступ без функции скобки, а затем использовать defineProperty:

const defaults = Object.defineProperty({ 
 
     backgroundcolor: '#000', 
 
     color: '#fff', 
 
    }, 'getProps', { 
 
     get: function() { return [ 
 
      'some value', 
 
      `${this.backgroundcolor}`, 
 
      `${this.color}` 
 
     ];} 
 
}); 
 

 
var x = defaults.getProps; 
 

 
console.log(x);

Вы также мог бы сделать конструктор, который вы выполняете сразу:

const defaults = new (function() { 
 
    this.backgroundcolor = '#000'; 
 
    this.color = '#fff'; 
 
    this.getProps = [ 
 
     'some value', 
 
     `${this.backgroundcolor}`, 
 
     `${this.color}` 
 
    ]; 
 
})(); 
 

 
var x = defaults.getProps; 
 

 
console.log(x);

+0

Большое спасибо. Работает как шарм. Смогу ли я сделать то же самое с анонимной функцией, используя() =>? Я пробовал, не понял. – TheEarlyMan

+1

Нет, '=>' синтаксис [не установлен] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions#No_binding_of_this) ключевое слово this. – trincot