reference variable in object literal? [duplicate]

2019-01-09 01:32发布

This question already has an answer here:

say I have

myfunc({
  var1: 1,
  var2: 2,
})

if i want to have a value that makes use of the current unnamed object, how would I do this?

eg if I wanted

myfunc({
  var1: 1,
  var2: 2,
  var3: this.var1 + this.var2
})

obviously this does not work.

What would the correct syntax be?

3条回答
劫难
2楼-- · 2019-01-09 02:14

You can't do it in the notation you're using. An object literal doesn't have any notion of itself in this context.

查看更多
Lonely孤独者°
3楼-- · 2019-01-09 02:16

You could make var3 a function, and calling it will allow you to use 'this':

x= {
    v1:4,
    v2:5,
    v3:function(){return this.v1 + this.v2;}
};

alert(x.v3());
查看更多
干净又极端
4楼-- · 2019-01-09 02:18

Unfortunately, that isn't possible. While an object literal is being constructed, no external reference to that object exists until the entire literal is evaluated. The only way to use this at this stage is to use a constructor instead:

function MyObject() {
  this.var1 = 1;
  this.var2 = 2;
  this.var3 = this.var1 + this.var2;
}

myfunc(new MyObject());
查看更多
登录 后发表回答