export const foobar = {
foo: 'hello',
bar: this.foo
};
它无法正常工作:" undefined"
我该如何访问它?
答案 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
语法。