let obj = {a: 1, b: 2*this.a} 这样取不到a,是this问题还是只能调用函数?

求大神解答:
let obj = {a: 1, b: 2*this.a} 这样取不到a,是this问题还是只能调用函数?

阅读 3.5k
4 个回答

此时this不是指向obj,另外你也取不到obj中的a,因为此时对象还没有生成,没有赋值给obj,所以obj仍是undefined

let obj = {a: 1, b: 2*this.a} 

obj.b // 这个值取决于运行的环境,简单来说如果你是在浏览器全局上下文执行就是2 * window.a

你想在对象里面使用对象里面的属性是不现实的,因为在计算这个属性的时候,你的对象还没有创建出来,是不可能的。

就好像这样:

 let obj = {a: 1, b: 2 * obj.a} 


因此要实现这样的功能,需要:

 let obj = {a: 1, b: () => 2 * obj.a}
  
  obj.b()

或者this也行,但是不推荐

obj = {a: 1, b: function() {return 2 * this.a}}
  
  用法一样的:
  
  obj.b()
let obj={a:1};
obj.b=2*obj.a;

关于this的指代其他回复都有讲,我就不废话了。
这个问题想要用a的值可以这样

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