js对象字面量中某一属性引用当前对象的其他属性。

说起来听绕口的,其实要解决的问题很简单:

1
2
3
4
5
// 这里假装this指向obj
var obj = {
a: "property a",
b: this.a + " something"
}

这段代码本来想要达到的目的就是根据对象来的一个属性来决定另一个属性的值。

但是上面的代码中,this其实并不是obj,而是javascript执行环境的全局对象,浏览器中就是window,nodejs就是global了。

在全局执行上下文中(在任何函数体外部)this都指代全局对象

所以b的值肯定不是你想要的那样。

有很多奇怪的方法能接近想要的效果,其中还是es5中的getter属性的方法最理想,也最简单。

1
2
3
4
5
6
7
8
var obj = {
a: "property a",
get b() {
return this.a + " something"
}
}

obj.b // => property a something

简单优雅

链接