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は既に定義済みのオブジェクトで、window オブジェクトのエイリアスです。self という名前の一時オブジェクトを定義している間 [したがって、window.self を削除していません]、これは実行すべきことではありません。キーワードであるかのようselfに振る舞い、現在の使用法は違法です。

于 2010-04-16T05:10:16.163 に答える