2016-03-04 12 views

ответ

1

Вы должны использовать getter синтаксис:

var this_module = { 

    foo: 'something' 

    get promise() { 
     return new Promise (function(resolve, reject) { 
      resolve (this.foo); 
     }.bind(this)) 
    } 
} 

Это происходит потому, что вы не имеете объект сам инициализирована при добавлении свойства к нему promise: new Promise().
В геттере объект уже инициализирован и обратный вызов может быть привязан к объекту this (see more около .bind()).

Примечание: Это возвратит новое обещание каждый раз при доступе к собственности (спасибо @Felix).

+1

Обратите внимание, что это будет возвращать новое обещание каждый раз при доступе к объекту. –

+0

@FelixKling Легко хранить обещание во внутренней собственности, если это необходимо. –

+0

Правильно, но все же важно отметить, что :) –

4

Не без вызова new Promiseпосле объект был создан:

this_module.promise = new Promise(function(...) { ... }.bind(this_module)); 

Это в основном та же проблема, как покрыта Self-references in object literal declarations: вы пытаетесь получить доступ к экземпляру объекта во время инициализации, который просто не возможно ,

+0

Большое спасибо @Felix Kling. Я получил два решения, которые я считаю очень полезными. Поэтому я бы предпочел отметить оба. К сожалению, это технически невозможно. Я дал ваш ответ на голосование, пытаясь «вознаградить» оба ответа - не уверен, что это нарушит какой-то протокол Stackoverflow. Один из недостатков вашего более простого и чистого решения: в модуле с множеством свойств существует много «строк» ​​между указанием свойства и установкой его значения. Для получения дополнительной информации о моем выборе см. Комментарий к другому ответу. – rabbitco

+0

Спасибо за ссылку, которая тоже получила один голос. – rabbitco

Смежные вопросы