1

配列を使用してオブジェクトのプロパティを取得できるかどうか疑問に思っています。this.label[i].xOffset の「未定義」値を取得しています。助言がありますか?

function label() {
    var lbl = this;
    lbl.rText;
    lbl.precision =1;
    lbl.prefix = '';
    lbl.suffix = '';
    lbl.xOffset = this.width/2;
    lbl.yOffset = this.height*82/100    
}
this.NoOfneedles=2;
if (this.NoOfneedles > 1) {
    this.label = [];
    for (i=0;i<this.NoOfneedles;i++) {
        this.label[i]=new label();
        alert("label xOffset:"+this.label[i]+this.label[i].xOffset);
    }
}
4

3 に答える 3

1

私はこれが問題かもしれないと思います:

コンストラクター関数label()で、xOffsetとyOffsetを'this'widthと'this' heightに設定していますが、'this'にはwidth/ heightプロパティがないため、未定義です。

于 2012-07-07T22:13:54.667 に答える
1

まず、あなたのlabel機能に問題があります:

lbl.xOffset = this.width/2;

ここで、this.widthはで作成したオブジェクトを参照するundefinedためです。しかし、その場合、オブジェクトのプロパティは に等しくなります。そして、この行:thisnew label()xOffsetNaN

lbl.rText;

何もしません。

于 2012-07-07T22:07:49.753 に答える
0

あなたのlabelオブジェクトにはプロパティがなくwidthheightすでに他の人があなたに言っていますが、コンストラクターを定義widthしてheight内部に入れると、次のように書くことができます

function Label() {
   var lbl = this;
   lbl.width=window.outerWidth;
   lbl.height=window.outerHeight;
   lbl.precision =1;
   lbl.prefix = '';
   lbl.suffix = '';
   lbl.xOffset = lbl.width/2;
   lbl.yOffset = lbl.height*82/100    
}

this.NoOfneedles=2;
if (this.NoOfneedles > 1){
    this.label = [];
    for (i=0;i<this.NoOfneedles;i++){
        this.label[i]=new Label();
        alert ("label xOffset:"+this.label[i].xOffset);
    }
}

これは現在のオブジェクトを参照し、コンストラクター内で使用していることを忘れないthis.width/2;でください。コンストラクターの内外this=Labelを変更しましたlabel/Labelグローバルスコープ内thisはデフォルトのグローバルオブジェクトwindowとグローバルスコープthis.someVarを参照し、はデフォルトのグローバルオブジェクトでsomeVarあるため同じwindowですデフォルトでは、これを使用する必要はないので、document.getElementbyIdの代わりに使用できますwindow.document.getElementbyId

于 2012-07-07T22:21:10.993 に答える