Используйте Значение в "export const" дважды как переменную - PullRequest
0 голосов
/ 03 мая 2018
export const foobar = {
    foo: 'hello',
    bar: this.foo
};

Он не будет работать: "undefined"

как я могу получить к нему доступ?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Внутри вашей экспортированной константы foobar, this представляют контекст, которому принадлежит константа и который global\window, поэтому вы получите значение как undefined.

Вы должны создать новую область, которой владеет ваша константа, чего можно достичь, создав function и присвоив bar свойство. Как ниже:

export const foobar = {
    foo: 'hello',
    bar: function(){
        return this.foo;
    }
};

теперь this будет содержать постоянный контекст foobar, и вы сможете получить доступ к prop foo, вызвав foobar.bar() (должен вернуть 'hello')

0 голосов
/ 03 мая 2018

Как уже упоминалось в других ответах, this использовался неправильно. Он относится к тому же контексту this, который был определен в области действия переменной foobar. Это undefined, когда скрипт выполняется в строгом режиме.

Чтобы обратиться к свойству foo, bar можно определить как пару функций получения / установки:

export const foobar = {
    foo: 'hello',
    get bar() {
      return this.foo;
    },
    set bar(v) {
      this.foo = v;
    }
};

Установщик может быть опущен в случае, если это константа, которая не должна быть изменена.

Обратите внимание, что дескрипторы страдают от снижения производительности в простых объектах в V8 (Chrome, Node.js и т. Д.), В местах, критичных к производительности, полезно определить дескриптор в прототипе объекта, например, с синтаксисом class.

0 голосов
/ 03 мая 2018

Насколько я знаю, вы не можете, по крайней мере, не так, как вы пытаетесь это сделать. Вы не можете использовать this, потому что вы не находитесь внутри класса, поэтому он указывает на глобальный контекст (если есть, или undefined), а другой единственный вариант - использовать foobar сам, как это :

const foobar = {
    foo: 'hello',
    bar: foobar.foo
}

Но это тоже не сработает, потому что, пока оператор не завершится, foobar не определен, поэтому вы получите ошибку.

Боюсь, единственный путь:

const foobar = {
    foo: 'hello',
    bar: undefined
}
foobar.bar = foobar.foo;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...