2

我有一个对象,它有几个在创建对象时设置的属性。

这个对象最近更改为对象文字表示法,但我遇到了一个在网上搜索没有发现的问题。

简单地说我需要这样做:

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;
};

如何以对象文字表示法初始化构造函数中的属性?

4

3 回答 3

3
  1. 您可以使用匿名函数动态创建数组:

    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;
    };
    
  2. 您可以在定义文字后执行此操作:

    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;
    };
    
于 2010-04-16T05:14:48.567 回答
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;
};
于 2010-04-16T05:15:24.790 回答
0

你不能。对象表示法不允许这样做。但是,您可以在初始化对象之后添加属性。

顺便说一句,self已经定义了一个对象,它是窗口对象的别名。虽然您正在定义一个名为 self 的临时对象 [因此,您不会摆脱 window.self] 这不是您应该做的事情。表现得好像self是一个关键字,而您当前对它的使用是非法的。

于 2010-04-16T05:10:16.163 回答