我有一个对象,它有几个在创建对象时设置的属性。
这个对象最近更改为对象文字表示法,但我遇到了一个问题,即网上搜索没有显示。
简单地说我需要这样做:
Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) {
var self = {
id: _id,
// other properties
links: [],
for (var i=0,j=0;i<8;i++) { //<- doesn't like this line
var k = parseInt(_links[i]);
if (k > 0) {
this.links[j++] = k;
}
},
// other methods
};
return self;
};
如何在对象文字表示法中初始化构造函数中的属性?
答案 0 :(得分:3)
您可以使用匿名函数动态创建数组:
Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) {
var self = {
id: _id,
// other properties
links: (function() {
var a = [];
for (var i=0;i<8;i++) {
var k = parseInt(_links[i]);
if (k > 0) {
a.push(k);
}
}
return a;
})(),
// other methods
};
return self;
};
您可以在定义文字后执行此操作:
Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) {
var self = {
id: _id,
// other properties
links: [],
// other methods
};
for (var i=0,j=0;i<8;i++) {
var k = parseInt(_links[i]);
if (k > 0) {
self.links[j++] = k;
}
}
return self;
};
答案 1 :(得分:1)
对于此特定示例,您可以使用匿名函数,如下所示:
Star = function(_id, _x, _y, _n, _o, _im, _c, _b, _links) {
var self = {
id: _id,
// other properties
links: (function(){
var links = [];
for (var i=0;i<8;i++) {
var k = parseInt(_links[i]);
if (k > 0) {
links.push(k);
}
}
return links;
})(),
// other methods
};
return self;
};
答案 2 :(得分:0)
你做不到。对象表示法不允许这样做。但是,您可以在初始化对象后添加属性。
顺便说一句,self
已经是一个已定义的对象,它是窗口对象的别名。当你定义一个名为self的临时对象时[因此,你没有摆脱window.self]这不是你要做的事情。就好像self
是一个关键字一样,你当前使用它是非法的。