1

だから私はJavascriptでのオブジェクト定義に不慣れで、練習としてオブジェクトを回転させるプログラムを書こうとしています。私の問題は、オブジェクトを定義しようとすると、オブジェクトのプロパティの一部がオブジェクトの他の部分に依存していることです。これが許可されているかどうかはわかりません。すべての検索で、その例を見つけることができなかったからです。

私の質問は基本的にこれです:オブジェクトの以前に定義されたプロパティを使用してそのオブジェクトを定義できますか?この最も基本的な例は次のようになります。

var alfred = {
    dogs: 1,
    cats:this.dogs+1,
}

これは許可されていますか?もしそうなら、これは正しい構文ですか?「これ」を使う必要がある理由。新しく作成されたオブジェクトをオブジェクトの配列にプッシュしているためです。機能していない私のコードは次のとおりです。

obj.push({
    canvas:document.getElementById(canvasName),

    canvasName:"canvas"+objNum,
    image: img,
    width:objWidth,
    height:objHeight,
    centerX:posX,
    centerY:posY,
    speed:speeds,
    hypSquare:Math.sqrt((this.width*this.width)+(this.height*this.height)),
    angleInSquare:Math.atan(this.height/this.width),
    angle:startAngle,
    angleTotal:this.angle+this.angleInSquare,
    offX:(this.hypSquare* Math.cos(this.anglesTotal))/2,
    offY:(this.hypSquare* Math.sin(this.anglesTotal))/2,
    centeredX:this.centerX-this.offX,
    centeredY:this.centerY-this.offY,
})

私が電話するとき

console.log(obj[objNum].hypSquare);

(ここで、objNumは配列内のオブジェクトのインデックスにすぎません)呼び出してもNaNを取得します

 console.log(obj[objNum].width);

objWidthの値を取得します。構文上の問題があるだけですか、それとも根本的に欠陥のあるオブジェクトについての私の理解ですか...

よろしくお願いします!

アイザック

4

2 に答える 2

2

いいえ、それはできません。オブジェクト初期化子を閉じてから、他のプロパティを追加する必要があります。例:

var alfred = {
    dogs: 1
};
alfred.cats = alfred.dogs + 1;

したがって、obj.push呼び出しには、一時変数(alfred上記のような)を使用する必要があります。インラインオブジェクト初期化子を使用することはできません。

于 2012-07-17T16:40:36.997 に答える
1

それをしてはいけない。ただし、オブジェクトコンストラクターは使用できます。

function Person(canvasName, objNum) {
  this.canvas = document.getElementById(canvasName);

  this.canvasName = "canvas" + objNum;
  ...
  this.centeredY = this.centerY - this.offY;
}

obj.push(new Person("alfred", 3));
于 2012-07-17T16:47:18.460 に答える