Angular 在“中使用值”;“出口成本”;双重变量

Angular 在“中使用值”;“出口成本”;双重变量,angular,typescript,Angular,Typescript,它的“未定义”无法工作 我怎样才能访问它?据我所知,你不能,至少你不想这样做。您不能使用this,因为您不在类中,因此它指向全局上下文(如果有,或未定义的),另一个唯一选项是使用foobar本身,如下所示: export const foobar = { foo: 'hello', bar: this.foo }; 但这也不起作用,因为在语句完成之前,foobar没有定义,因此会出现错误 恐怕唯一的办法是: const foobar = { foo: 'hello',

它的“未定义”无法工作


我怎样才能访问它?

据我所知,你不能,至少你不想这样做。您不能使用
this
,因为您不在类中,因此它指向全局上下文(如果有,或
未定义的
),另一个唯一选项是使用
foobar
本身,如下所示:

export const foobar = {
    foo: 'hello',
    bar: this.foo
};
但这也不起作用,因为在语句完成之前,
foobar
没有定义,因此会出现错误

恐怕唯一的办法是:

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

在导出的const
foobar
中,
表示拥有该常量且为
global\window的上下文
,因此得到的值为
未定义

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

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

现在,
将保持
foobar
恒定上下文,您可以通过调用
foobar.bar()
(应返回“hello”)

访问prop
foo
,正如其他答案已经提到的,
使用不正确。它引用的
上下文与定义的范围
foobar
变量相同。当脚本在严格模式下运行时,它是未定义的

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

export const foobar = {
    foo: 'hello',
    bar: function(){
        return this.foo;
    }
};
如果setter是不应修改的常量,则可以省略它


请注意,描述符在V8(Chrome、Node.js等)中会受到影响,在性能关键的地方,在对象原型上定义描述符是有益的,例如使用
语法。

也许这是可能的,但这似乎很奇怪。您的用例是什么?并且
将指向
窗口
对象,因此
未定义
。因为没有
窗口.foo
export const foobar = {
    foo: 'hello',
    get bar() {
      return this.foo;
    },
    set bar(v) {
      this.foo = v;
    }
};