使用值"导出const"变量两倍

时间:2018-05-03 13:43:28

标签: angular typescript

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

它无法正常工作:" undefined"

我该如何访问它?

3 个答案:

答案 0 :(得分:1)

据我所知,你不能,至少不喜欢你试图去做。您无法使用n,因为您不在某个类中,因此它指向全局上下文(如果有的话,或this)而另一个选项仅指向使用undefined本身,如下所示:

foobar

但是这也不会起作用,因为在语句结束之前,const foobar = { foo: 'hello', bar: foobar.foo } 没有定义,所以你得到一个错误。

恐怕唯一的办法就是:

foobar

答案 1 :(得分:1)

在导出的const foobar中,this表示拥有常量且为global\window的上下文,因此您将值设为undefined

您必须创建一个由常量拥有的新范围,这可以通过创建function并分配给bar属性来实现。如下所示:

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

现在this将保留foobar常量上下文,您可以通过调用foo来访问道具foobar.bar()(应该返回'你好' )

答案 2 :(得分:1)

正如其他答案已经提到的那样,this使用不正确。它指的是与定义范围this变量中相同的foobar上下文。当脚本以严格模式运行时,它为undefined

为了引用foo属性,bar可以定义为一对getter / setter函数:

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

如果它是一个不应该被修改的常量,可以省略一个setter。

请注意,描述符在V8(Chrome,Node.js等)中受performance penalty in plain objects影响,在性能关键的位置,在对象原型上定义描述符是有益的,例如:使用class语法。