为什么js对象的属性不能用this调用另一属性

obj = {
    a: 123,
    b: this.a
    c: function () {
        return this.a;
    }
};
obj.b; // undefined
obj.c(); // 123

请问这是为什么?


谢谢大家为我解答这个问题,现在我已经明白是怎么回事了。

总结一下:

1、在全局运行上下文中(在任何函数体外部),this 指代全局对象,无论是否在严格模式下。
2、在函数内部,this的值取决于函数是如何调用的。

感谢 @不爱吃西红柿的鱼
分享一下他的文章,让我受益匪浅:js中this的一些总结

阅读 4.8k
4 个回答

谢邀。你这是对象字面量的形式在申明一个对象变量。

相当于

obj = new Object();
obj.a=123;
obj.b = this.a;

此时的this指向的是不是obj这个对象,而是当前作用域空间的那个this指向。

这是作用域问题,你b属性里的this其实是指向了父级作用域,这个对象本身无法创建作用域,所以你的this.a指向了与obj平级的a,但是你并没有定义过这样的a,于是就是undefined了.
你可以通过函数来创建一个作用域

obj = {
    a: 123,
    b: function () {
        return this.a
    }
};

obj.b() // 123

如果你觉得obj.b()麻烦,还可以这样玩

obj = {
    a: 123,
    get b() {
        return this.a
    }
};

obj.b // 123

这个this指向的window

你要明白,那个this的指针,并不是指向obj的,而是指向的window,而window内并没有声明a,所以返回undefined:

var obj={
    a:123,
    b:this
}
console.log(obj.b);//window
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题