0
var events = [
    {id: 100,url: "mc.jsp?id=" + id},
    {id: 200,url: "mc2.jsp?id=" + id},
    {id: 300,url: "mc2.jsp?id=" + id}
]

运行时,url 等于mc.jsp?id=undefined,那么如何将 id (100) 分配给 url 以获取 的值mc.jsp?id=100?并将第二个 url 设为mc2.jsp=200第三个mc2.jsp?id=300 ,这样我就无法在数组之外进行分配。

4

4 回答 4

2

您不能在构造上访问对象文字中的其他属性。你得到一个,undefined因为你没有变量id。您将需要使用:

var id = 100;
var events = [{"id":id, "url":"mc.jsp?id=" + id}];

或者:

var event = {id: 100};
event.url = "mc.jsp?id=" + event.id
var events = [event];

但你可以定义一个吸气剂:

var events = [{id: 100, get url() { return "mc.jsp?id="+this.id; } }];

这是非常复杂且难以理解的。也许最好做这样的事情:

function MyEvent(id, mc) {
    this.id = id;
    this.mc = mc;
}
MyEvent.prototype.getUrl = function() {
    return "mc"+this.mc+".jsp?id="+this.id;
};

var events = [new MyEvent(100, ""), new MyEvent(200, "2"), ...];

但是,应该没有这样的问题。如果您对数字进行硬编码,为什么不对网址进行硬编码?如果您不想要冗余,请不要将 id 存储两次并在每次需要时附加它。

于 2012-05-20T21:25:37.640 回答
0

您无法添加id,因为它是属性的名称,而不是变量。你可以做:

var ids = [100,200,300];
var events = [];
for(var i = 0; i < ids.length;i++){
    events[i] = {id: ids[i],url: "mc.jsp?id=" + ids[i]};
}
于 2012-05-20T21:26:01.203 回答
0
 var id = 100, events = [{id: id, url: "mc.jsp?id=" + id}];
于 2012-05-20T21:26:12.060 回答
0

你可以试试类似的东西。

var event = {
 'id': 100,
 'url': 'mc.jsp?id=' + event.id
}

var events = [];
events.push(event);  
于 2012-05-20T21:54:15.353 回答